无法用lines()函数为添加的卡方分布曲线设置不同颜色
问题解决:卡方分布曲线颜色不区分的问题
问题根源
你的代码核心问题出在for循环的逻辑错误:
- 循环变量遍历
x的每个值完全多余,我们需要遍历的是自由度的索引 - 直接传入
degf[1:3]给dchisq会一次性生成三个自由度的密度值,但lines函数无法同时绘制三条不同颜色的曲线,只会取颜色向量的第一个值绘制所有曲线,导致颜色重复
另外注意:注释里存在错误,dchisq()返回的是概率密度函数(PDF),不是累积分布函数(CDF),CDF对应的函数是pchisq()。
修正后的代码
x <- seq(-4, 45, length=500) # x轴取值 dist.x <- dnorm(x, mean = 20, sd = 5) # 正态分布概率密度(mean=20, sd=5) degf <- c(4,10, 20) # 三个自由度值 colors <- c("green","red", "blue", "black") # 对应颜色(前三个给卡方,最后一个给正态) labels <- c("df=4", "df=10","df=20", "normal") # 图例标签 # 先绘制正态分布曲线(虚线) plot(dist.x, col = colors[4], type="l", lty=2, lwd=2, xlab="x value", ylab="Density", main="Comparison of Normal and Chi-Square Distributions") # 遍历每个自由度,分别绘制对应颜色的卡方曲线 for (i in seq_along(degf)){ lines(x, dchisq(x, degf[i]), lty=1, lwd=2, col= colors[i]) } # 添加图例 legend("topright", inset=0.01, title="Distributions", labels, lwd=2, lty=c(1, 1, 1, 2), col=colors)
修改说明
- 循环改为遍历
seq_along(degf)(即1、2、3),每次处理单个自由度 - 每次调用
lines时,仅传入当前自由度degf[i]和对应颜色colors[i],确保每条曲线用指定颜色绘制 - 修正了注释里关于
dchisq的错误描述
内容的提问来源于stack exchange,提问作者Mike Jones
相关产品推荐
相关产品推荐

