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

无法用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:50:24