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

时间:2019-01-08 16:02:36

标签: r ggplot2 geom-text

我正在尝试创建一个条形图,并使用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)

使用此代码,因为也不存在条,所以组3没有标签。我想在x轴上方还有一个黑色标签。

2 个答案:

答案 0 :(得分:1)

只需添加另一个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的组。

enter image description here

答案 1 :(得分: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)

1

使用group3 == 3.1

2

这种方法的舒适之处:

  • 它会自动处理大小的值
  • 您不需要第二个数据框或几何图形

这种方法的要点:

  • 对于每个可视化,应校准硬编码为> 3的内容。如果深入研究ggplot2如何构建图形,可能会自动该部分,但是对于这个小例子来说,这可能会显得过份。