100%堆积条形图数据标签不是百分比

时间:2017-09-27 19:58:08

标签: r bar-chart labels stacked-chart

我正在尝试使用ggplot2在R中制作100%堆积条形图,并获取真实计数的数据标签,而不是百分比。当我尝试这样做时,我会在图表的另一侧看到标签出来的小条形图。我可以得到一个常规条形图,其中有条形图,我知道这里有很多问题如何获得百分比,但我没有找到任何答案,如我正在寻找的。 这是为了工作,但一些模拟数据类似于:

dat <- read.table(text = "assessment User N
missingcomma Sara 5
notcapitolized Sara 2
noindent Sara 1
missingcomma Jason 1
notcapitolized Jason 3
noindent Jason 4
missingcomma Andre 3
notcapitolized Andre 1
noindenet Andre 2", header = TRUE)

使用此代码,我可以获得条形图和数据标签:

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
     geom_bar(stat = "identity") + 
     geom_text(aes(label = N), position = position_stack(vjust = 0.5)) +
     coord_flip()

条形图&amp;标签:

使用此代码,我可以获得100%堆积的图表,我的标签位于不知名的地方。

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
     geom_bar(stat = "identity", position = "fill") + 
     geom_text(aes(label = N), position = position_stack(vjust = 0.5)) +
     coord_flip()

带有疯狂标签的100%堆积图表:

请帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您需要按组计算文本位置,如Ramnath答案的“旧版ggplot”部分:Showing data values on stacked bar chart in ggplot2

ave()函数是assessment中的每个组:

  1. 如果不是 cumsum()
  2. ,请使用position = "fill"计算堆积条形图的总高度
  3. 从该总数中减去每个计数,将其值减去一半
  4. 按照组的总计数对它们进行标准化,因为position = "fill"将它们标准化为y轴范围[0,1]
  5. ggplot(dat) + geom_col(aes(x = assessment, y = N, fill = User), position = "fill") + geom_text(aes(x = assessment, y = ave(dat$N, dat$assessment, FUN = function(x) (cumsum(x) - 0.5 * x) / sum(x)), label = N)) + coord_flip()

    ggplot