如何在ggplot中绘制堆叠柱状图(无需重塑数据框)
嘿,我来帮你搞定这个堆叠柱状图的问题!
你的代码之所以只显示mythirdC的柱子,主要有两个原因:
- 两次调用
geom_col都是从y轴0的位置开始绘制,而mythirdC的数值普遍比mysecondC大,直接把底层的柱子完全覆盖了; - 你用了
colour参数设置的是柱子边框颜色,而非填充色,就算没有覆盖,也很难看出两层的区别。
不用重塑数据框的话,我们可以通过给第二个图层设置堆叠位置来解决,下面是两种可行的写法:
方法1:用geom_bar实现堆叠
geom_col本质是geom_bar(stat="identity")的简写,我们直接用geom_bar并指定position="stack",让上层柱子堆叠在底层上面:
library(ggplot2) mydf=data.frame(c("A","B","C","D"),c(100,110,90,120),c(150,200,160,180)) names(mydf)=c("myfirstC","mysecondC","mythirdC") ggplot(data=mydf, aes(x=myfirstC))+ # 绘制底层的mysecondC柱子,绑定填充色映射 geom_bar(aes(y=mysecondC, fill="mysecondC"), stat="identity")+ # 绘制上层的mythirdC柱子,开启堆叠模式 geom_bar(aes(y=mythirdC, fill="mythirdC"), stat="identity", position="stack") + # 手动指定填充色对应关系 scale_fill_manual(values=c("mysecondC"="blue", "mythirdC"="red")) + # 优化图表标签 labs( title = "Stacked Bar Chart", x = "Category", y = "Value", fill = "Data Column" )
方法2:用geom_col实现堆叠
如果你更习惯用geom_col,只需要给第二个geom_col加上position="stack"参数即可,效果完全一致:
ggplot(data=mydf, aes(x=myfirstC))+ geom_col(aes(y=mysecondC, fill="mysecondC"))+ geom_col(aes(y=mythirdC, fill="mythirdC"), position="stack") + scale_fill_manual(values=c("mysecondC"="blue", "mythirdC"="red")) + labs( title = "Stacked Bar Chart with geom_col", x = "Category", y = "Value", fill = "Data Column" )
这样就能得到清晰的堆叠柱状图,两层柱子分别对应mysecondC和mythirdC,颜色区分明显,而且完全不需要修改原数据框的结构。
内容的提问来源于stack exchange,提问作者nexonvantec
相关产品推荐
相关产品推荐

