R 如何在条形顶部添加计数,以及条形内部填充的百分比?
我有一些数据,其中每个观察值包含2个因素,类别(a和E之间的字母)和标志(0或1)。在应用group_by(classes,flag)和SUMMARY(frequency=n())之后,我得到了一个与此类似的数据帧:R 如何在条形顶部添加计数,以及条形内部填充的百分比?,r,ggplot2,label,percentage,stacked-chart,R,Ggplot2,Label,Percentage,Stacked Chart,我有一些数据,其中每个观察值包含2个因素,类别(a和E之间的字母)和标志(0或1)。在应用group_by(classes,flag)和SUMMARY(frequency=n())之后,我得到了一个与此类似的数据帧: classes <-as.factor(c("A", "A", "B", "B", "C", "C", "D", "D", "E", "E")) flag <- as.factor(rep(c(0,1),10)) quantity <- c(856
classes <-as.factor(c("A", "A", "B", "B", "C", "C", "D", "D", "E", "E"))
flag <- as.factor(rep(c(0,1),10))
quantity <- c(856, 569, 463, 125, 795, 313, 1000, 457, 669, 201)
df <- data.frame(classes, flag, quantity)
但是,我不知道如何使用geom_text()来包含每个条顶部的总计数和条内填充值的比例
谢谢你的帮助 我不知道如何实现自动化,也许在绘图之外计算比例和总和是最简单的方法 在绘图外重新排序类更容易,这样文本就可以接管因子级别
df$x <- reorder(df$classes, -df$quantity)
然后我们让text_df$class
采用与df$x
相同的顺序
text_df$class <- factor(text_df$class, levels = levels(df$x))
并为文本添加两个几何体,一个表示比例,一个表示总和;两者都具有y偏移
+geom_text(data = text_df,
aes(x = class,
y = sum + 100, # some offset
label = sum)) +
geom_text(data = text_df,
aes(x = class,
y = sum - 100, # opposite offset
label = scales::percent(prop)))
我想这就成功了。祝你好运 非常感谢你的回答!很明显,我不得不修改一些东西来获得我想要的东西,但是你的代码做到了。但有一件事需要修改。为了在创建
text_df
时获得值标志==1的比例,应该像这样创建prop列prop=sapply(split(df$quantity,df$classes),function(x){x[2]/(x[1]+x[2])
。
text_df$class <- factor(text_df$class, levels = levels(df$x))
ggplot(df, aes(x = x, y = quantity)) +
geom_bar(aes(fill = as.factor(flag)), stat="identity") +
theme(axis.text.x=element_text(angle = 90, hjust = 1)) +
labs(x = NULL, y = "Quantity", fill = "flag") +
scale_fill_manual(values=c("firebrick","dodgerblue4"),
labels=c("1"="Yes","0"="No"))+
theme(axis.ticks = element_blank())
+geom_text(data = text_df,
aes(x = class,
y = sum + 100, # some offset
label = sum)) +
geom_text(data = text_df,
aes(x = class,
y = sum - 100, # opposite offset
label = scales::percent(prop)))