ggplot中含position_dodge2的柱状图与折线图对齐问题
解决geom_line与geom_col错位问题
问题出在geom_col用position_dodge2(preserve="single")时,柱子的位置是按分组偏移的,但geom_line默认基于原始x轴位置绘制,没对齐柱子的偏移量;直接给geom_line加同样的position_dodge2会因为折线的连续点特性导致错位更严重。
你可以按以下方式修改代码:
- 给
geom_col明确指定width参数,同时在position_dodge2里匹配这个宽度 - 给
geom_line使用position_dodge(而非position_dodge2),并设置和geom_col一致的width值,确保折线点对齐柱子中心
修改后的完整代码:
diamonds %>% group_by(cut) %>% count(clarity) %>% mutate(perc = n/sum(n) * 100) %>% ggplot() + geom_col(aes(x = cut, y = perc, fill = clarity), width = 0.8, position = position_dodge2(preserve = "single", width = 0.8)) + geom_line(aes(x = cut, y = perc, color = clarity, group = clarity), position = position_dodge(width = 0.8), linewidth = 1)
关键说明:
position_dodge2是专为柱形/条形设计的,支持preserve="single"保证缺失分组时柱宽恒定;折线适合用position_dodge来对齐分组位置- 必须保证
geom_col的width和两个position参数里的width一致,这样折线的点才能精准落在对应柱子的中心 - 若要调整柱子间距,统一修改
width值即可(比如改成0.7会让柱子更窄、间距更大)
内容的提问来源于stack exchange,提问作者Pol
相关产品推荐
相关产品推荐

