如何使用ggplot将所有变量展示在同一张图表中?
解决方法:用ggplot展示所有变量的分组柱状图
你的数据是宽格式,但ggplot绘制多系列图表需要长格式数据——你之前的代码里用到的values列在原数据中不存在,这就是代码跑不通的原因。按以下步骤操作即可:
1. 先把宽格式转成适合ggplot的长格式
用tidyr::pivot_longer函数把除name外的所有列转换为「变量名-数值」的键值对:
library(tidyverse) # 转换数据格式 long_data <- Results_Case2_Annuity %>% pivot_longer(cols = -name, # 除了name列之外的所有列 names_to = "variable", # 新列:存储原列名(比如NPV、Cost_Household) values_to = "values") # 新列:存储对应数值
转换后的长格式数据结构示例:
name variable values <chr> <chr> <dbl> 1 11kWp NPV 15746. 2 11kWp Cost_Household 1932. 3 11kWp Cost_Plant 13865. 4 9kWp NPV 13640. ...
2. 用ggplot绘制分组柱状图
基于转换后的长数据,就可以画出每个name对应的所有变量的并列柱状图了:
ggplot(long_data, aes(x = name, y = values, fill = variable)) + geom_col(position = "dodge", width = 0.7) + # dodge实现柱子并列,width调整柱子宽度 labs(title = "各类型变量对比", x = "装机容量", y = "数值", fill = "变量类型") + theme_minimal()
关键说明:
fill = variable:用不同颜色区分NPV、家庭成本、电站成本这些变量position = "dodge":让同一装机容量下的不同变量柱子并列显示,而非堆叠- 可根据需求自行调整标题、坐标轴标签和主题样式
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

