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

如何在R中绘制概率密度函数?分区间绘图遇长度不匹配错误求解

解决R绘图中"x和y长度不同"的报错问题

这个报错的核心原因很明确:你在调用plot()的时候,传给y轴的是函数本身,而不是函数在x取值上计算出的结果。

让我们拆解一下问题:

  • 你定义的x1是从-1到0、步长0.01的序列,一共有101个元素
  • 但你写plot(x1, eq1)时,eq1是一个函数对象,不是计算后的数值向量,它的长度是1,自然和x1的101个元素长度不匹配,就触发了'x' and 'y' lengths differ的错误

修正后的代码

下面是修复后的代码,同时我也优化了绘图逻辑,用lines()替代par(new=TRUE),避免重复绘制坐标轴:

# 定义x的取值范围
x1 = seq(-1, 0, 0.01)
x2 = seq(0, 1, 0.01)

# 定义概率密度函数
eq1 = function(x) {(1+x)^2}
eq2 = function(x) {(1+x)^3}

# 先绘制第一个曲线,设置好坐标轴范围
plot(x1, eq1(x1), col="red", type="l", xlim=c(-1,1), ylim=c(min(eq1(x1), eq2(x2)), max(eq1(x1), eq2(x2))),
     xlab="x", ylab="Probability Density")

# 添加第二个曲线
lines(x2, eq2(x2), col="green")

关键改进点

  • 把eq1改成eq1(x1),eq2改成eq2(x2),这样就能得到和x长度匹配的y值向量
  • 用plot()先画第一个曲线时,通过xlim和ylim设置好整个图的坐标轴范围,确保两个曲线都能完整显示
  • 使用lines()添加第二条曲线,比par(new=TRUE)更简洁,也不会出现重复的坐标轴标签

如果你还是想用par(new=TRUE)的方式,也需要修正函数调用的问题,同时手动对齐坐标轴范围,比如:

x1 = seq(-1, 0, 0.01)
x2 = seq(0, 1, 0.01)
eq1 = function(x) {(1+x)^2}
eq2 = function(x) {(1+x)^3}

plot(x1, eq1(x1), col="red", type="l", xlim=c(-1,1), ylim=c(0, 8))
par(new = TRUE)
plot(x2, eq2(x2), type = "l", col = "green", xlim=c(-1,1), ylim=c(0,8), axes=FALSE, xlab="", ylab="")

不过第一种方法更推荐,代码更清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:01:57