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

为何R语言绘制双Y轴时两条曲线重合?数值存在差异

解决R语言双Y轴曲线重合问题

你的代码出现曲线重合的核心问题有两个:

  1. X轴数据类型不严谨:X被定义为字符向量,虽然R会自动转换为因子索引绘图,但可能导致x轴刻度逻辑不符合实际数值含义;
  2. 双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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:33:09