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

