首页 > 解决方案 > 向ggplot条形图中的每个条形添加计数

问题描述

我有一个大数据集,可以使用下面的 mwe 来举例说明

df <- data.frame("x" = c(1,1,1,2),"value" = c(4,3,5,1), "groupA" = c("A","B","A","B"), "groupB" = c("X","Y","Y","Y"))
df$value <- ifelse(df$groupB == "Y", -df$value, df$value)

我需要绘制这个,其中一组产生填充,另一组产生填充,无论它是在 x 轴上方还是下方。这可以按如下方式完成:

ggplot(df,aes(x=x,y=value,fill=groupA))+
    geom_bar(stat="identity")+

这会产生高于和低于零的每个 groupB 中的值的总和,并且很好地对条形进行颜色编码:

mwe 条形图

在此处输入图像描述

但是,我还需要将每个实例中的计数打印为每个条形上方的标签。像这样使用Aniko 的建议

 ggplot(df,aes(x=x,y=value,fill=groupA))+
      geom_bar(stat="identity")+
      geom_text(aes(label=..count..,group=x,y=..count..), vjust=0,stat="count")

产生这个:

条形图 w。标签

在此处输入图像描述

如您所见,标签的位置由计数定义。我曾尝试设置y=value, or y=5(例如),但这会导致错误消息。

我该如何解决这个问题?

(zx8754回复后编辑)

标签: rggplot2

解决方案


我的意思是,它不漂亮,但它有效......

library(dplyr)
library(ggplot2)
df %>% 
  group_by(x) %>% 
  mutate(count = ifelse(row_number() == 1, n(), NA)) %>% 
  ggplot(aes(x = x, y = value,fill = groupA))+
    geom_col() +
    geom_text(aes(label = count, x = x, y = value))

回报:

在此处输入图像描述


推荐阅读