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

ggplot双Y轴问题:将次Y轴转换为exp时轴范围异常

解决ggplot双Y轴(对数转指数)对齐问题

你的问题出在次轴没有绑定原轴的刻度点,ggplot默认会自动生成次轴的刻度,导致和原轴的指数转换不匹配,甚至范围溢出。要让两个轴严格对应,需要把原Y轴的每个刻度值做指数转换后,作为次轴的刻度。

修改后的代码

ggplot(data=df,aes(sample.size,eff.size))+
  geom_raster(aes(fill=value),interpolate = TRUE)+
  scale_x_continuous(breaks=sub_list,
                     name="Sample Size")+
  scale_y_continuous(breaks=eff_list,
                     name="Log Odds Ratio",
                     sec.axis = sec_axis(
                       trans = ~exp(.),  # 原轴到次轴的转换规则
                       breaks = exp(eff_list),  # 次轴刻度对应原轴刻度的exp值
                       name = "Odds Ratio"  # 次轴名称
                     ))

关键说明

  • 用exp(eff_list)作为次轴的breaks,让两个轴的刻度线完全对齐,每一条原轴的刻度线对应次轴的指数转换值。
  • 次轴的范围会自动跟随原轴范围转换,不会出现超出范围的情况——原轴的最小值exp后就是次轴最小值,最大值exp后就是次轴最大值。
  • 如果需要优化次轴标签格式(比如保留2位小数),可以给sec_axis加个labels参数:
    labels = function(x) round(x, 2)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:08