我正试图使用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()条形图及标签:

有了这段代码,我就可以得到一个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%堆叠图w/疯狂标签:

请帮忙,我会很感激的。
发布于 2017-09-27 21:22:13
我认为您需要按组计算文本位置,就像Ramnath在这里的答案:Showing data values on stacked bar chart in ggplot2中的“ggplot的旧版本”中的那样。
对于ave()中的每个组,assessment函数是
cumsum()计算堆垛杆的总高度,如果它们不是 position = "fill"position = "fill"将它们规范化为y轴范围0,1。
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()

https://stackoverflow.com/questions/46456255
复制相似问题