geom_col绘制堆叠列时未遵循因子水平顺序的问题求助
问题解决:geom_col堆叠图因子顺序与显示不一致
问题分析
你的数据中ST268Q04JA的因子顺序已设定为"Strongly disagree", "Disagree", "Agree", "Strongly agree",但绘图时出现顺序错乱,核心原因是:当y值包含正负时,geom_col默认的position_stack()会将正负值分开展示,且同符号组的堆叠顺序默认是因子水平的反序,同时图例顺序也会受此影响偏离设定。
解决方案
方案1:强制图例按因子顺序显示
通过scale_fill_discrete指定图例的显示顺序为因子的原始水平,确保图例与你设定的顺序一致:
ggplot(df, aes(x = gender, y = total, fill= ST268Q04JA)) + geom_col(colour="white") + # 强制图例遵循因子原始顺序 scale_fill_discrete(limits = levels(df$ST268Q04JA)) + coord_flip() + theme(legend.position = "bottom")
方案2:同步调整堆叠层次与图例顺序
如果希望堆叠的层次也和因子顺序对应(正数部分从下到上按Agree→Strongly agree排列),可以给geom_col添加position = position_stack(reverse = TRUE),反转堆叠顺序,再结合图例顺序设置:
ggplot(df, aes(x = gender, y = total, fill= ST268Q04JA)) + # 反转堆叠顺序,匹配因子水平顺序 geom_col(colour="white", position = position_stack(reverse = TRUE)) + scale_fill_discrete(limits = levels(df$ST268Q04JA)) + coord_flip() + theme(legend.position = "bottom")
注意:确保代码中数据对象名一致(你的示例里数据是
df,绘图代码用了plt_data,需统一)。
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

