You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:54:20