r - 如何将 geom_text 标签对齐到躲避的 geom_col 上方

标签 r ggplot2 geom-text geom-col

我似乎找不到一种方法来让这个(躲闪的)geom_col 上的文本标签根据各自的列排列。

我在 SO 和其他网站上尝试了许多建议解决方案,这是我能得到的最接近的解决方案:

enter image description here

如何解决这个问题?

代码:

ggplot(leads[leads$key_as_string <= max(leads$key_as_string) - 1, ], aes(fill = type)) +
  geom_col(aes(x = key_as_string, y = doc_count),
           colour = "black",
           position = position_dodge(1)) +
  scale_y_continuous(limits = c(0, max(leads$doc_count))) +
  geom_text(aes(x = key_as_string, y = doc_count, label = doc_count, group = key_as_string),
            hjust = 0.5,
            vjust = -0.5,
            size = 3,
            colour = "black",
            position = position_dodge(1)) +
  theme(panel.grid.minor.x = element_blank(),
        panel.grid.major.x = element_blank(),
        axis.text = element_text(colour = "black"))

最佳答案

根据我的评论,group = key_as_string 是这里的罪魁祸首。该代码本质上是告诉 ggplot 将具有相同 key_as_string 值的两个标签保留在同一组中,从而否定 dodge 命令。

下面是钻石数据集的插图。我们可以看到,删除 group 美学映射会改变标签的位置:

p <- ggplot(diamonds %>%
              filter(cut %in% c("Fair", "Good")) %>%
              group_by(cut, clarity) %>%
              summarise(carat = mean(carat)), 
            aes(clarity, carat, fill = cut, label = round(carat, 2))) + 
  geom_col(position = position_dodge(1))

gridExtra::grid.arrange(
  p + geom_text(position = position_dodge(1), aes(group = clarity)),
  p + geom_text(position = position_dodge(1)),
  ncol = 1
)

plot

关于r - 如何将 geom_text 标签对齐到躲避的 geom_col 上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742470/

相关文章:

r - 如何在 geom_Text 中给出多个条件

r - 在ggplot2中绘制大多边形 map 的小区域

r - R 中的计数和聚合日期

r - tapply和ave之间的功能有什么区别?

r - 一个图中两个图例之间的间隙较小(例如颜色和大小比例)

r - 如何删除 ggplot geom_bar 图中的选择标签并将这些标签居中?

r - 无法找到签名 ‘vif’ 整数的函数 ‘"的继承方法”’

r - 如何使用 ggplot2 生成热图?

r - ggplot2:突出显示不连续性的背景

r - 将标签放在负和正 geom_bar 上