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
相关产品推荐
相关产品推荐

