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

RStudio中如何绘制双Y轴同图展示不同量级的销售额与温度序列

R双Y轴绘制两个量级差异的时间序列方案

实现思路

由于销售额和温度数值量级差异大,无法直接在同一Y轴展示,因此通过数值缩放+次Y轴映射的方式实现:

  1. 先将xts格式的时间序列转换为ggplot可直接处理的结构化数据框
  2. 计算两个变量的范围比值作为缩放系数,将温度变量缩放至与销售额量级匹配
  3. 绘图时将两个变量分别映射到主、次Y轴,次Y轴通过反向缩放还原温度的真实数值

完整实现代码

首先加载依赖包:

library(ggplot2)
library(dplyr)
library(ggfortify)

数据处理与绘图:

# 将xts对象转换为带日期列的数据框
df <- fortify(data_tmp) %>% 
  select(date = Index, sales, temperature)

# 计算缩放系数:用两个变量的极差比值计算,适配含负值的场景
scale_factor <- diff(range(df$sales, na.rm = TRUE)) / diff(range(df$temperature, na.rm = TRUE))

# 绘制双Y轴时序图
ggplot(df, aes(x = date)) +
  # 绘制销售额曲线,映射左侧主Y轴
  geom_line(aes(y = sales, color = "销售额"), linewidth = 1) +
  # 绘制温度曲线,乘以缩放系数后适配主Y轴范围
  geom_line(aes(y = temperature * scale_factor, color = "温度"), linewidth = 1) +
  # 配置双Y轴:右侧次Y轴反向除以缩放系数还原温度真实值
  scale_y_continuous(
    name = "销售额",
    sec.axis = sec_axis(~. / scale_factor, name = "温度")
  ) +
  # 自定义两个变量的配色
  scale_color_manual(values = c("销售额" = "#1f77b4", "温度" = "#ff7f0e")) +
  # 优化图表标签与主题
  labs(x = "日期", color = "指标类型") +
  theme_bw() +
  # 左右Y轴标题和对应曲线配色一致,可读性更强
  theme(
    axis.title.y.left = element_text(color = "#1f77b4"),
    axis.title.y.right = element_text(color = "#ff7f0e")
  )

调优提示

  • 如果两个序列的重叠度过高影响观察,可以在计算缩放系数时额外乘以0.8/1.2的调整系数,拉开两个序列的展示位置
  • 若需要保留autoplot的风格,也可直接用autoplot(data_tmp, facets = FALSE) + 次Y轴配置,但灵活度低于直接用ggplot自定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:57:04