RStudio中ggplot()绘制分组条形图失败求助
解决ggplot分组条形图重叠问题
嗨,我来帮你搞定这个条形图重叠的麻烦!你的问题核心其实很明确:你没有告诉ggplot要按年份来分组,所以哪怕用了position="dodge",它也不知道该把哪些条形并排显示。
问题根源
你把2019和2020的数据集合并成了tgc_combi,但合并后的数据集里没有一个列来标记每条数据属于哪一年,而且在ggplot的aes()映射里也没指定分组变量。这就导致ggplot把同一个Category下的所有数据都当成了一组,自然就重叠在一起了,position="dodge"根本没发挥作用。
修复步骤
1. 先给原始数据集添加年份标识
在合并之前,给tgc20和tgc19各加一个Year列,用来区分年份:
# 给2020年数据加年份标记 tgc20$Year <- 2020 # 给2019年数据加年份标记 tgc19$Year <- 2019 # 再合并数据 tgc_combi <- rbind(tgc20, tgc19)
2. 修改ggplot代码,添加分组映射
在aes()里加入fill=Year(或者color=Year,用fill的话还能自动生成图例,更直观),同时确保geom_bar和geom_errorbar的position_dodge宽度一致,这样误差线才能和条形对齐:
ggplot(tgc_combi, aes(x=Category, y=Visitors, fill=Year)) + ggtitle("Number of visitors in each category") + xlab("Category") + ylab("Visitor numbers") + theme(plot.title = element_text(hjust = 0.5)) + # 指定条形的dodge宽度,让同类别年份条形并排 geom_bar(position=position_dodge(width=0.9), stat="identity") + # 误差线的dodge宽度要和条形一致,避免错位 geom_errorbar(aes(ymin=Visitors-se, ymax=Visitors+se), width=.2, position=position_dodge(width=0.9))
额外提示
如果你的数据集里已经有Year列了,那直接在aes()里加上fill=Year就行,不用再重新加列。另外,position_dodge的宽度可以根据你的图表需求微调,0.9是比较常用的数值,能让条形之间保持合适的间距。
内容的提问来源于stack exchange,提问作者Petula
相关产品推荐
相关产品推荐

