ggplot2添加反向次坐标轴后abline消失的技术咨询
问题原因
geom_abline的斜率和截距是基于原始数据坐标系计算的,当你用trans="reverse"反转x轴时,x轴的数值顺序被颠倒,但geom_abline仍按原始x的方向计算直线位置,导致直线超出了当前绘图的可视区域,所以看不到。
解决方案
只需要修改斜率的符号,不需要调整截距。因为反转x轴等价于将x变量取反,原来的直线方程y = -0.7*x + 32.72,在反转后的坐标系(x' = -x)下,代入后得到y = 0.7*x' + 32.72,修改斜率符号后直线就能适配反转后的轴,回到可视区域:
library(ggplot2) library(scales) k <- 8.617333262145e-05 # Boltzmann constant in eV/K ggplot(data, aes(x = inv_kT, y = ln_SR)) + geom_point(color="black") + geom_abline(slope = 0.70, intercept=32.72) + # 仅修改斜率符号 scale_x_continuous( trans="reverse", sec.axis=sec_axis(trans=~ (1/.)/k-273.15, name="Temperature (°C)", breaks=pretty_breaks(n=5)))
原理补充
轴变换是绘图时的坐标映射,geom_abline的参数直接对应原始数据的x、y值。反转x轴后,原始数据中x较大的点会被绘制在轴的左侧,x较小的点在右侧,原来的负斜率直线在这个反转轴上的走向会超出绘图范围;修改斜率符号后,直线的走向会适配反转后的轴,与原始直线的视觉位置一致。
内容的提问来源于stack exchange,提问作者yuliaUU
相关产品推荐
相关产品推荐

