如何在 ggplot2 (R) 的条形图中更改 geom_text 的颜色和位置?

How to change colour and position of geom_text for just one bar in a barplot in ggplot2 (R)?

我正在尝试使用 ggplot2 将描绘的值写入条形图来创建条形图。我仍然想用值“0”标记该组,但使用不同的颜色(黑色)并在 x 轴上方。我怎样才能改变这个 geom_text 的位置和颜色?

我已经尝试在 scale_colour_manual 中输入向量,但没有成功(或者我没有做对)。

data <- read.table(text = "group percentage
               group1 30
               group2 29
               group3 0
               group4 18", header=TRUE)

library(ggplot2)
ggplot(data, aes(x=group, y=percentage))+
  theme_bw()+
  geom_bar(stat = 'identity', position = "dodge", fill="#13449f")+
  geom_text(aes(label = percentage), position = position_dodge(0.9), 
  vjust=1.3, colour = "white", size=6)

使用此代码,group3 没有标签,因为也没有栏。我想在 x 轴上方仍然有一个黑色的标签。

只需添加另一个 geom_text 层。例如

ggplot(data, aes(x=group, y=percentage))+
  theme_bw()+
  geom_bar(stat = 'identity', position = "dodge", fill="#13449f")+
  geom_text(aes(label = percentage), position = position_dodge(0.9), 
            vjust=1.3, colour = "white", size=6) + 
  geom_text(aes(label = "0", y=1), data=subset(data, percentage==0), size=6)

这里我们将图层数据更改为仅包含那些带有 0 的组。

通过条件逻辑:

library(ggplot2)
ggplot(data, aes(x = group, y = percentage))+
    theme_bw()+
    geom_bar(stat = 'identity', position = "dodge", fill = "#13449f") +
    geom_text(aes(label = percentage), position = position_dodge(0.9), 
              vjust = ifelse(data$percentage > 3, 1.3, -0.3), 
              colour = ifelse(data$percentage > 3, "white", "black"), 
              size = 6)

随着 group3 == 3.1

这种方法的优点:

  • 它会自动处理大小值
  • 您不需要第二个数据框或 geom

这种方法的注意事项:

  • 硬编码为 > 3 的内容应针对每个可视化进行校准。如果您深入了解 ggplot2 如何构建图形,可以 自动化该部分,但对于这个小示例来说,这将是过大的杀伤力。