为何R语言绘制双Y轴时两条曲线重合?数值存在差异
解决R语言双Y轴曲线重合问题
你的代码出现曲线重合的核心问题有两个:
- X轴数据类型不严谨:
X被定义为字符向量,虽然R会自动转换为因子索引绘图,但可能导致x轴刻度逻辑不符合实际数值含义; - 双Y轴未独立配置:第二个绘图未指定自身的y轴范围,默认复用第一个图的y轴区间,加上两组数据数值差距较小,最终造成曲线视觉上重合。
修正后的代码
# 将X转换为数值型,确保x轴刻度对应真实高度值 X <- as.numeric(c('1.07', '2.14', '3.22', '4.29')) Y <- c(0.298, 0.272, 0.271, 0.270) Y1 <- c(0.274, 0.269, 0.255, 0.249) # 调整边距,为右侧Y轴预留显示空间 par(mar = c(5, 4, 4, 4) + 0.1) # 绘制第一条曲线,使用Y的数值范围 plot(X, Y, xlab= "VG高度(mm)", ylab= "阻力系数(Cd)", main = "VG高度与阻力系数关系", type= "o", pch = 20, lwd = 2, col = "red", ylim = range(Y)) # 允许在当前画布上叠加新绘图 par(new = TRUE) # 绘制第二条曲线,指定Y1的数值范围,关闭默认坐标轴 plot(X, Y1, xlab= "", ylab= "", main = "", axes = FALSE, type= "o", pch = 20, lwd = 2, col = "blue", ylim = range(Y1)) # 添加右侧独立Y轴,颜色匹配第二条曲线 axis(4, col = "blue", col.axis = "blue") # 添加右侧Y轴标签 mtext("第二组阻力系数(Cd)", side = 4, line = 3, col = "blue") # 添加图例区分两条曲线 legend("topright", legend = c("Y组", "Y1组"), col = c("red", "blue"), pch = 20, lwd = 2)
关键修正说明
- 把字符型的
X转换为数值型,保证x轴刻度与输入的实际高度值一致; - 为第二个绘图单独设置
ylim = range(Y1),让Y1的数值基于自身范围映射,避免被拉伸到第一个y轴的区间; - 添加右侧独立Y轴及对应标签,明确区分两组数据的刻度体系;
- 调整边距防止右侧轴标签被画布边缘遮挡。
内容的提问来源于stack exchange,提问作者Sabit Shahriar Haque
相关产品推荐
相关产品推荐

