我正在尝试使用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%堆积图表:
请帮助,我们将不胜感激。
答案 0 :(得分:0)
我认为您需要按组计算文本位置,如Ramnath答案的“旧版ggplot”部分:Showing data values on stacked bar chart in ggplot2。
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()