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

如何在ggplot中叠加燃气与电力用量柱状图和价格折线图

堆叠柱状图+双折线图合并绘制方案

我有一个名为cost的DataFrame,包含日期、燃气(Gas)、电力(Electricity)的用量(usage)及对应价格(price)数据。需要绘制堆叠柱状图展示两类能源的用量占比,同时叠加两条折线展示二者同期价格。目前已分别完成柱状图和折线图的绘制,但无法合并,求可行方案。

数据片段

structure(list(Date = structure(c(18686, 18686, 18714, 18714, 
18745, 18745), class = "Date"), Utility = c("Gas", "Electricity", 
"Gas", "Electricity", "Gas", "Electricity"), usage = c(0, 0, 
125, 208, 104, 232), price = c(0, 0, 45.46, 37.82, 39.67, 43.09
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

原有单独绘图代码

  • 堆叠柱状图:
ggplot(cost) +
  aes(x = Date, fill = Utility, weight = usage) +
  geom_bar() +
  scale_fill_hue(direction = 1) +
  theme_minimal()
  • 价格折线图:
ggplot(cost) +
  aes(x = Date, y = price, colour = Utility) +
  geom_line(size = 0.5) +
  scale_color_manual(
    values = c(Electricity = "#8E0152",
    Gas = "#276419")
  ) +
  theme_minimal()

合并解决方案

由于用量(usage)和价格(price)是量级完全不同的指标,需使用双y轴合并图表。核心思路:以堆叠柱状图为主图(对应左y轴),在同一画布添加折线图并绑定右y轴,同时统一颜色映射保证图例一致性。

完整合并代码

library(ggplot2)

# 定义统一颜色映射,确保柱状图与折线图颜色对应
color_map <- c(Electricity = "#8E0152", Gas = "#276419")

ggplot(cost) +
  # 绘制堆叠柱状图:对应左y轴(能源用量)
  aes(x = Date) +
  geom_bar(aes(fill = Utility, weight = usage), position = "stack") +
  # 绘制价格折线图:绑定右y轴,指定group确保分能源连线
  geom_line(aes(y = price, color = Utility, group = Utility), size = 0.5) +
  # 配置双y轴标签
  scale_y_continuous(
    name = "能源用量",
    sec.axis = sec_axis(~., name = "能源价格")
  ) +
  # 统一颜色映射,自动合并图例
  scale_fill_manual(values = color_map) +
  scale_color_manual(values = color_map) +
  # 主题与标签优化
  theme_minimal() +
  labs(x = "日期", fill = "能源类型", color = "能源类型")

关键细节说明

  1. sec.axis = sec_axis(~., name = "能源价格"):创建第二个y轴,用于展示价格数据;
  2. group = Utility:折线图需明确分组,避免同一日期的两个数据点连线错误;
  3. 统一scale_fill_manual和scale_color_manual的颜色映射:让同一能源的柱状图和折线图颜色一致,图例自动合并;
  4. position = "stack":显式指定柱状图为堆叠模式(默认也是堆叠,显式书写更清晰)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:30