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

ggplot双Y轴绘图问题:柱状图无法清晰显示

双Y轴柱状图+折线图的正确绘制方法

问题根源在于:ggplot的次Y轴仅为视觉呈现,不会自动对对应数据做缩放。你设置了次Y轴的转换公式~./200,但未对water数据做反向缩放,导致柱状图仍基于主Y轴原始数值绘制,因数值过小几乎不可见。

修正步骤

  • 对water数据按比例缩放(乘以200,与次Y轴转换公式反向对应),让其数值范围适配主Y轴
  • 次Y轴保持原转换公式,将缩放后的数值还原为water的原始刻度

修正后的代码

library(ggplot2)
library(lubridate)

# 你的数据子集
turn <- data.frame(
  date = ymd(c("2020-08-26", "2020-08-31", "2020-09-08", "2020-09-22", "2020-10-12",
               "2020-10-20", "2020-11-09", "2020-12-10", "2021-01-05", "2021-02-10",
               "2021-03-30", "2021-04-22", "2021-05-18", "2021-06-01", "2021-06-16",
               "2021-07-07", "2021-07-22", "2021-08-11", "2021-08-26")),
  clam = c(62.17, 277.85, 90.58, 97.0, 86.15, 14.90, 24.16, 20.07, 8.72, 14.05,
           10.09, 10.96, 12.30, 8.60, 15.17, 1045.67, 61.49, 25.64, 15.71),
  water = c(3.84, 1.93, 4.59, 0.81, 0.12, 0.65, 0.00, 0.11, 0.00, 0.00,
            0.00, 0.00, 0.00, 0.00, 0.00, 0.28, 0.41, 0.00, 0.16)
)

# 核心修改:对water做缩放后绘制柱状图
p <- ggplot(turn, aes(x=date)) + 
  geom_line(aes(y = clam, group=1), colour = "black", size = 1) + 
  geom_bar(aes(y=water * 200), stat = "identity", fill="cyan", colour ="#006000")+
  scale_y_continuous(
    name = "clam",
    sec.axis = sec_axis(trans=~./200, name = "water")
  ) + 
  theme_minimal() + 
  theme(axis.text.x=element_text(angle=60, hjust=1)) 

p

关键说明

  • 缩放因子200是根据你的数据范围选择的(water最大值4.59×200≈918,接近clam最大值1045.67),可根据实际数据调整
  • 次Y轴的trans=~./200会将缩放后的数值还原为water原始值,保证刻度显示准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:56:23