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

ggplot双Y轴图表:如何固定左侧Y轴范围与刻度?

解决左侧Y轴刻度标准化问题

问题出在你重复调用了两次scale_y_continuous——第二次调用会完全覆盖第一次的轴设置,导致你最初定义的固定刻度和范围失效,ggplot会自动根据当前Score的数值范围生成刻度。

只需要把左侧Y轴的固定配置和右侧副轴的定义合并到同一个scale_y_continuous调用里即可,修改后的代码如下:

coeff <- 40

df %>%
  ggplot(aes(x = Day)) +
  geom_line(aes(y = Score1, color = "Score 1")) + # 替换成Score2/Score6等都可以
  geom_vline(xintercept = 1, linetype="dashed", color = "grey", size = 0.5) + 
  scale_x_continuous(
    limits = c(-14, 14),
    breaks = seq(-14, 14, by = 2),
    labels = seq(-14, 14, by = 2)
  ) +
  # 合并Y轴配置,只调用一次scale_y_continuous
  scale_y_continuous(
    name = "Score",
    limits = c(0, 5),
    breaks = seq(0, 5, by = 1),
    labels = seq(0, 5, by = 1),
    sec.axis = sec_axis(~.*coeff, name = "Weight")
  ) + 
  scale_color_manual(values = c("red", "green")) +
  labs(x = "Day") +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.title.y = element_text(color = "red", vjust = 2),
    axis.title.y.right = element_text(color = "green", vjust = 2),
    legend.position = "none"
  )

关键说明:

  • 移除了重复的scale_y_continuous调用,把左侧轴的limits、breaks、labels和右侧副轴sec.axis放在同一个配置里。
  • 无论你把geom_line里的y换成Score1到Score6中的任意一个,左侧Y轴都会固定显示0、1、2、3、4、5全部刻度。
  • 如果需要修改Score的图例名称,只需要调整geom_line里的color参数值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:40