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

R语言绘制数值差异悬殊的双Y轴图表:显示REP标准差及正确刻度

解决双Y轴数值范围差异大的可视化问题

核心思路

不用手动缩小REP数值,而是通过ggplot的双Y轴转换机制,将REP按比例映射到左侧温度轴的范围,同时在右侧显示REP的原始刻度,这样既保留标准差的可视化,也能让右侧轴刻度准确。

具体步骤与代码示例

假设你的数据框名为df,先计算缩放系数:

# 计算温度和REP的范围区间
temp_range <- range(df$minTempAmb_Avg)
rep_range <- range(df$REP)

# 计算缩放系数:把REP缩放到温度的范围区间内
coeff <- (temp_range[2] - temp_range[1]) / (rep_range[2] - rep_range[1])

然后编写ggplot可视化代码:

library(ggplot2)

ggplot(df, aes(x = date)) +
  # 绘制温度的柱状图(对应左侧Y轴)
  geom_bar(aes(y = minTempAmb_Avg, fill = "minTempAmb_Avg"), 
           stat = "identity", alpha = 0.7) +
  # 绘制REP的折线和点(已缩放至左侧轴范围)
  geom_line(aes(y = REP * coeff, color = "REP"), linewidth = 1) +
  geom_point(aes(y = REP * coeff, color = "REP"), size = 2) +
  # 绘制REP的标准差误差线(同步缩放,确保显示正常)
  geom_errorbar(aes(y = REP * coeff, 
                    ymin = (REP - sd_REP) * coeff, 
                    ymax = (REP + sd_REP) * coeff),
                width = 0.2, color = "darkred") +
  # 设置双Y轴:左侧显示温度,右侧还原REP原始数值
  scale_y_continuous(
    name = "minTempAmb_Avg",
    sec.axis = sec_axis(~ . / coeff, name = "REP")
  ) +
  # 调整图例与主题样式
  scale_fill_manual(values = "steelblue") +
  scale_color_manual(values = "darkred") +
  labs(x = "Date", fill = "", color = "") +
  theme_minimal() +
  theme(legend.position = "top")

关键说明

  • 缩放系数coeff让REP的数值范围刚好匹配温度的范围,避免折线和误差线被压缩或超出图表显示区域。
  • 右侧Y轴通过sec_axis(~ . / coeff)将缩放后的数值还原为REP的原始值,刻度会自动计算,保证准确性。
  • 误差线的ymin和ymax必须同步乘以coeff,才能和缩放后的REP折线对应,正确展示标准差的波动幅度。

内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:05:33