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

在R语言ggplot2中为绘图添加双Y轴的问题求助

R双Y轴数据映射修复方案

要解决你提到的四个数据系列错误显示在左侧Y轴的问题,核心是利用数据缩放+辅助轴转换的逻辑(以下以最常用的ggplot2为例,base R思路类似):

关键逻辑

右侧Y轴范围是0-400,左侧是0-40,两者比例为10:1。你需要先把右侧四个系列的数值除以10,让它们适配左侧轴的范围,再通过sec_axis把辅助轴的刻度转换回原始的0-400范围,这样就能实现数据到右侧轴的正确映射。

示例代码(可直接适配你的数据)

library(ggplot2)

# 替换成你的实际数据框
your_data <- data.frame(
  # 假设你的X轴是时间或类别变量
  X_var = c("8:00", "9:00", "10:00", "11:00"),
  # 左侧Y轴的变量(0-40范围)
  Left_Series1 = c(5, 12, 28, 35),
  Left_Series2 = c(3, 15, 22, 38),
  # 需要放到右侧Y轴的四个系列(0-400范围)
  Cars_Avg_Sunday = c(50, 120, 280, 350),
  Cars_Carfree_sunday = c(30, 150, 220, 380),
  Active_AvgSunday = c(40, 130, 260, 330),
  Active_CarfreeSunday = c(60, 110, 290, 360)
)

ggplot(your_data, aes(x = X_var)) +
  # 绘制左侧Y轴的系列(正常映射)
  geom_line(aes(y = Left_Series1, color = "左侧系列1"), group = 1) +
  geom_line(aes(y = Left_Series2, color = "左侧系列2"), group = 1) +
  # 绘制右侧Y轴的四个系列:数值除以10适配左侧轴范围
  geom_line(aes(y = Cars_Avg_Sunday / 10, color = "Cars_Avg_Sunday"), group = 1) +
  geom_line(aes(y = Cars_Carfree_sunday / 10, color = "Cars_Carfree_sunday"), group = 1) +
  geom_line(aes(y = Active_AvgSunday / 10, color = "Active_AvgSunday"), group = 1) +
  geom_line(aes(y = Active_CarfreeSunday / 10, color = "Active_CarfreeSunday"), group = 1) +
  # 设置Y轴:左侧范围0-40,右侧辅助轴转换回0-400
  scale_y_continuous(
    name = "左侧Y轴(0-40)",
    limits = c(0, 40),
    sec.axis = sec_axis(
      trans = ~ . * 10,  # 反转缩放,把刻度转成0-400
      name = "右侧Y轴(0-400)",
      limits = c(0, 400)
    )
  ) +
  # 自定义颜色区分系列
  scale_color_manual(
    values = c(
      "左侧系列1" = "#2c3e50",
      "左侧系列2" = "#e74c3c",
      "Cars_Avg_Sunday" = "#3498db",
      "Cars_Carfree_sunday" = "#9b59b6",
      "Active_AvgSunday" = "#2ecc71",
      "Active_CarfreeSunday" = "#f39c12"
    )
  ) +
  labs(x = "时间", color = "数据系列") +
  theme_minimal()

注意事项

  1. 所有需要映射到右侧轴的系列,必须在aes(y = ...)中对数值进行缩放(这里是/10),否则会默认使用左侧轴范围。
  2. 如果你的左侧轴不是从0开始,缩放比例需要调整为(右侧最大值 - 右侧最小值)/(左侧最大值 - 左侧最小值),再用这个比例对右侧数据进行缩放。
  3. 若使用base R绘图,可通过par(new = TRUE)创建新绘图区域,设置axis(4)来添加右侧轴,同时手动调整右侧数据的y范围适配左侧绘图区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:48