首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >100%堆叠条形图数据标签而不是百分比

100%堆叠条形图数据标签而不是百分比
EN

Stack Overflow用户
提问于 2017-09-27 19:58:08
回答 1查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
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)

有了这段代码,我可以得到条形图和数据标签:

代码语言:javascript
复制
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()

条形图及标签:

有了这段代码,我就可以得到一个100%的堆叠图表,而我的标签就在不知名的地方。

代码语言:javascript
复制
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%堆叠图w/疯狂标签:

请帮忙,我会很感激的。

EN

回答 1

Stack Overflow用户

发布于 2017-09-27 21:22:13

我认为您需要按组计算文本位置,就像Ramnath在这里的答案:Showing data values on stacked bar chart in ggplot2中的“ggplot的旧版本”中的那样。

对于ave()中的每个组,assessment函数是

  1. 使用cumsum()计算堆垛杆的总高度,如果它们不是 position = "fill"
  2. 从总数中减去每一个计数,减去其值的一半。
  3. 根据组的总计数对它们进行规范化,因为position = "fill"将它们规范化为y轴范围0,1。

代码语言:javascript
复制
  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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46456255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档