【问题标题】:How to annotate text in a constant vertical place of different geom_col plots如何在不同 geom_col 绘图的恒定垂直位置注释文本
【发布时间】:2020-04-07 09:32:13
【问题描述】:

我需要编写一个函数,该函数将为具有不同列数的不同数据创建geom_plot。我需要在绘图的固定位置添加文本注释,无论它将有多少列。它将始终在y = 1.02 上,我希望它始终与右侧对齐。我对单个情节的尝试如下:

mtcars %>% 
    mutate(gear = as.factor(as.character(gear))) %>% 
    group_by(gear) %>% summarise(qsec = sum(qsec)) %>% 
    mutate(qsec_index = qsec / mean(qsec)) %>% 
    ggplot() + 
        geom_col(aes(gear, qsec_index)) + 
        geom_hline(aes(yintercept = 1)) + 
        geom_text(aes(x = 3.4, y = 1.02, label = 'Average'))

但是,无论我的基础数据是否有 2、4、5 等列,我如何才能使其始终与右侧对齐?

【问题讨论】:

    标签: r ggplot2 geom-text


    【解决方案1】:

    您可以根据 x 变量的级别数放置注释。这里我们用carb代替gear来演示:

    mtcars %>% 
        mutate(carb = as.factor(as.character(carb))) %>% 
        group_by(carb) %>% summarise(qsec = sum(qsec)) %>% 
        mutate(qsec_index = qsec / mean(qsec)) %>% 
        ggplot() + 
            geom_col(aes(carb, qsec_index)) + 
            geom_hline(aes(yintercept = 1)) + 
            geom_text(aes(x = length(levels(carb)) + .4, y = 1.02, label = 'Average'),
                      hjust = 1, vjust = -1)
    

    它仍然可以使用gear

    mtcars %>% 
        mutate(gear = as.factor(as.character(gear))) %>% 
        group_by(gear) %>% summarise(qsec = sum(qsec)) %>% 
        mutate(qsec_index = qsec / mean(qsec)) %>% 
        ggplot() + 
            geom_col(aes(gear, qsec_index)) + 
            geom_hline(aes(yintercept = 1)) + 
            geom_text(aes(x = length(levels(gear)) + .4, y = 1.02, label = 'Average'),
                      hjust = 1, vjust = -1)
    

    reprex package (v0.3.0) 于 2020 年 4 月 7 日创建

    【讨论】:

    • 如果已经设置了xy位置,hjust = 1vjust = -1的作用是什么?
    • @Xaume 这些会影响注释在图像缩放时的定位方式。如果您事先知道图片的确切尺寸,那么这些都是不必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多