【问题标题】:How to change colour and position of geom_text for just one bar in a barplot in ggplot2 (R)?如何在ggplot2(R)的条形图中仅更改一个条形的geom_text的颜色和位置?
【发布时间】:2019-06-03 08:41:50
【问题描述】:

我正在尝试使用 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 轴上方仍然有一个黑色标签。

【问题讨论】:

  • 欢迎来到 Stackoverflow!这是一个格式很好且清晰的第一个问题,恭喜!

标签: r ggplot2 geom-text


【解决方案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 的组。

【讨论】:

  • 非常感谢,本来可以这么简单的......!但是我有一个类似的问题,条形基本上太“小”而无法包含整个数字(例如,当百分比仅为 1 或 0.5 时)。然后如何将这个数字移到条形上方并更改其颜色?这里你的“技巧”不适用。
【解决方案2】:

通过条件逻辑:

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

这种方法的警告:

  • 硬编码为&gt; 3 的内容应针对每个可视化进行校准。如果您深入了解 ggplot2 如何构建图表,有可能自动化该部分,但对于这个小例子来说,这将是多余的。

【讨论】:

  • 非常感谢,这正是我一直在寻找的!
猜你喜欢
  • 2014-04-07
  • 2013-12-11
  • 1970-01-01
  • 2011-08-03
  • 2012-01-19
  • 2021-07-10
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多