ggplot绘图异常求助:类别无序且重复显示
问题解决:ggplot X轴类别无序且重复显示
你的问题核心是各图层的X轴变量没有统一使用排序后的因子——只有柱状图用了reorder(Sektor, -Preis)做排序,其他图层(折线、标签)仍调用原始未排序变量,导致X轴因子顺序混乱,出现重复类别。
以下是具体修复步骤和代码:
步骤1:预处理数据,统一X轴因子顺序
绘图前先对data_c的Sektor列设置排序后的因子,确保所有图层共用同一顺序:
# 按Preis降序排列Sektor,转换为因子 data_c$Sektor <- reorder(data_c$Sektor, -data_c$Preis) # 对齐data_d的sektoren2与data_c的Sektor因子水平(确保二者分类内容一致) data_d$sektoren2 <- factor(data_d$sektoren2, levels = levels(data_c$Sektor))
步骤2:修改ggplot代码,统一X轴映射
把所有图层的X轴映射换成排序后的因子,避免不同变量引发的顺序冲突:
ggplot(data = data_c, aes(x = Sektor, y = Preis)) + geom_bar(stat = "identity", width = data_c$Menge/26) + # 直接用已排序的Sektor,无需重复reorder geom_line(aes(group = 1, colour = "40 € pro MWh")) + # 用已对齐因子水平的sektoren2作为X轴 geom_line(data = data_d, aes(x = sektoren2, y = preise2, group = 1, colour = "60 € pro MWh")) + geom_label(aes(label = preise2a), nudge_y = 30, size = 4) + geom_label(aes(label = twh2), nudge_y = 6, size = 4) + geom_text(aes(label = euros), vjust = 1.5, colour = "white", size = 2) + scale_y_continuous(labels = dollar_format(suffix = " €", prefix = "")) + labs(title = "Merrit Order Curve Wasserstoff", subtitle = "Mengen in TWh und Preise in Euro pro MWh", x = "Sektoren", y = "Preise in Euro pro MWh") + theme_bw()
关键注意点
- 不要仅在单个图层内使用
reorder,否则其他图层会沿用原始变量顺序,导致X轴混乱。 - 必须保证
data_c和data_d的X轴分类变量(Sektor与sektoren2)因子水平完全匹配,否则会出现类别重复或错位。 - 若
sektoren2与Sektor内容完全一致,建议将data_d的列名改为Sektor,减少代码变量混淆。
内容的提问来源于stack exchange,提问作者Moritz Ritter
相关产品推荐
相关产品推荐

