ggplot2堆叠柱状图:如何绘制年度总柱子的连续轮廓
解决ggplot绘制年度总和柱子时的分组分隔线问题
嘿,我完全懂你碰到的麻烦——原本想画每年value的总和,结果因为带着type的分组映射,柱子被拆成了好几段,还多出了黑色分隔线,完全不是想要的整根柱子效果对吧?别担心,给你两种简单的解决思路:
方法一:先预处理数据,计算年度总和
最稳妥的方式是先把数据聚合到年度级别,去掉type的分组,这样绘图时就不会有多余的分隔线了。用dplyr来做数据汇总超方便:
# 加载需要的包 library(dplyr) library(ggplot2) # 计算每年的value总和,忽略type分组 yearly_summary <- df %>% group_by(year) %>% summarize(total_value = sum(value, na.rm = TRUE)) %>% # na.rm用来忽略缺失值 ungroup() # 绘制整根带轮廓的柱子 ggplot(yearly_summary, aes(x = year, y = total_value)) + geom_col( fill = "#69b3a2", # 填充色可以自己选 color = "black", # 柱子轮廓颜色 size = 1 # 轮廓粗细,数值越大越粗 ) + labs( x = "年份", y = "年度总值", title = "每年Value总和" ) + theme_bw()
方法二:直接用stat_summary绘制,不保留分组映射
如果你不想提前处理数据,也可以用stat_summary直接在绘图时计算总和,但一定要去掉type相关的映射(比如color = type或者group = type),这样ggplot就不会按分组拆分柱子了:
ggplot(df, aes(x = year, y = value)) + stat_summary( fun = sum, # 指定计算总和的函数 geom = "col", # 用柱子类型展示 fill = "#69b3a2", color = "black", size = 1 ) + labs( x = "年份", y = "年度总值", title = "每年Value总和" ) + theme_bw()
核心要点就是:只要绘图时不保留type的分组映射,不管是提前汇总数据还是用stat_summary,都能画出整根带完整轮廓的年度总和柱子,不会再出现那些多余的黑色分隔线啦~
内容的提问来源于stack exchange,提问作者mbrandalero
相关产品推荐
相关产品推荐

