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

ggplot中已缩放后调整y轴范围的问题求助

解决ggplot离散Y轴范围调整问题

你的核心问题是Y轴为离散型变量,因此不能使用针对连续轴的scale_y_continuous,而ylim会直接覆盖已设置的scale_y_discrete配置。正确的做法是直接修改scale_y_discrete的limits参数,仅保留需要显示的类别:

修改后的代码

ggplot(DichteM, aes(UT, Mittelwert.von.Solidagoscale) )+
  geom_point()+
  ggtitle("Solidago")+
  theme(plot.title = element_text(hjust = 0.5, size = 12))+
  stat_smooth(method = "lm", formula = "y~x", se=FALSE, size = 0.1)+
  xlim(c(0,15))+
  # 仅保留2到5的离散类别
  scale_y_discrete(limits = c("2","3","4","5"))+
  ylab("Dichte Braun-Blanquet")+
  xlab("Überflutungstage/Jahr")

关键说明

  • 你的Mittelwert.von.Solidagoscale是离散变量(取值为字符串类型的"r","+","1","2","3","4","5"),必须通过scale_y_discrete控制轴的显示范围,直接在limits中指定需要保留的类别即可。
  • ylim()会完全替换之前的scale配置,因此不能同时使用;scale_y_continuous仅适用于数值型连续变量,对离散轴无效。

如果你的离散类别背后实际代表有序数值(比如"r"<"+"<"1"<"2"...),也可以先将变量转换为有序因子,再调整显示范围,效果一致:

# 转换为有序因子(确保类别顺序正确,可选操作)
DichteM$Mittelwert.von.Solidagoscale <- factor(DichteM$Mittelwert.von.Solidagoscale, 
                                               levels = c("r", "+", "1","2","3","4","5"),
                                               ordered = TRUE)
# 绘制图表,仅保留2-5的级别
ggplot(DichteM, aes(UT, Mittelwert.von.Solidagoscale) )+
  # 其他图层配置不变
  scale_y_discrete(limits = c("2","3","4","5"))+
  # 剩余代码...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:20:58