如何在不同 geom_col 图的恒定垂直位置注释文本

How to annotate text in a constant vertical place of different geom_col plots

我需要编写一个函数,为具有不同列数的不同数据生成 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 等列,我如何才能使其始终右对齐?

您可以根据 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-04-07 创建