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

如何在R的ggplot中按value_out.net排序堆叠柱散点图的Fuel类别

解决方法

你的问题出在堆叠条形图的每个Fuel对应多条数据,直接用reorder()会默认对重复的value_out.net取均值,导致排序逻辑不对。以下两种方法可以实现按value_out.net升序/降序排列:

方法1:先预处理数据,修改Fuel的因子顺序

先提取每个Fuel对应的唯一value_out.net值,再重新设置Fuel的因子水平:

# 如果用dplyr处理数据
library(dplyr)

# 升序排序:获取每个Fuel的net值并按升序排列
fuel_order_asc <- all_fuels %>%
  distinct(Fuel, value_out.net) %>%  # 保留每个Fuel对应的唯一net值
  arrange(value_out.net) %>%         # 按net升序排序
  pull(Fuel)                         # 提取排序后的Fuel名称

# 降序排序只需要把arrange改成arrange(desc(value_out.net))
fuel_order_desc <- all_fuels %>%
  distinct(Fuel, value_out.net) %>%
  arrange(desc(value_out.net)) %>%
  pull(Fuel)

# 将Fuel转为因子,指定排序后的水平
all_fuels <- all_fuels %>%
  mutate(Fuel = factor(Fuel, levels = fuel_order_asc))  # 这里换成fuel_order_desc就是降序

之后直接运行你原来的绘图代码即可,coord_flip()后Fuel会按指定顺序排列。

方法2:直接在ggplot的aes中用reorder指定排序逻辑

不需要修改原数据,直接在x轴的映射里用reorder(),并指定FUN=unique来获取每个Fuel的唯一net值作为排序依据:

# 升序版本
fuels_out_plot_w_tot_order <- ggplot() +
  geom_bar(data = all_fuels, aes(x = reorder(Fuel, value_out.net, FUN = unique), y = value_out, fill = stage_emission), stat = "identity") +
  geom_point(data = all_fuels, aes(x = reorder(Fuel, value_out.net, FUN = unique), y = value_out.net), size = 1) +
  scale_y_continuous("g CO2e/kWh", 
                     sec.axis = sec_axis(~ . / conv_mj_kwh, name = "g CO2e/MJ")) +
  theme(legend.title = element_blank()) +
  ggtitle("Well-to-wheel emissions (powertrain efficiency considered)") +
  coord_flip(); fuels_out_plot_w_tot_order

# 降序版本只需要把value_out.net改成desc(value_out.net)
fuels_out_plot_w_tot_order_desc <- ggplot() +
  geom_bar(data = all_fuels, aes(x = reorder(Fuel, desc(value_out.net), FUN = unique), y = value_out, fill = stage_emission), stat = "identity") +
  geom_point(data = all_fuels, aes(x = reorder(Fuel, desc(value_out.net), FUN = unique), y = value_out.net), size = 1) +
  scale_y_continuous("g CO2e/kWh", 
                     sec.axis = sec_axis(~ . / conv_mj_kwh, name = "g CO2e/MJ")) +
  theme(legend.title = element_blank()) +
  ggtitle("Well-to-wheel emissions (powertrain efficiency considered)") +
  coord_flip(); fuels_out_plot_w_tot_order_desc

这样就能让Fuel类别按黑色点的value_out.net值完成升序或降序排序了。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:24:58