You need to enable JavaScript to run this app. R语言使用循环生成重叠密度图仅显示单条曲线问题求助
优惠活动
大模型
产品
解决方案
定价
更多

R语言使用循环生成重叠密度图仅显示单条曲线问题求助

问题原因
  • 循环遍历逻辑错误:你写的for (i in length(df))只会循环1次。length(df)返回的是数据框列数的单个数值,不是1到列数的序列,仅会处理最后一列数据。
  • 画布被重复覆盖:每次循环都执行plot()函数会清空当前画布重绘,之前绘制的内容会被直接覆盖,最终仅能看到最后一条密度曲线。
修正代码

基础可用版本

# 用第一列数据初始化画布
plot(density(df[,1]), main = "重叠密度图", xlab = "数值", ylab = "密度", col = 1)
# 遍历剩余所有列,通过lines函数叠加曲线
for (i in 2:ncol(df)) {
  x <- df[,i]
  lines(density(x), col = i)
}

若存在部分曲线超出画布的情况,可以提前计算所有密度数据的取值范围,初始化画布时就设置好全局轴范围,避免截断:

# 预计算所有列的密度对象
all_dens <- lapply(df, density)
# 计算全局坐标范围
x_range <- range(sapply(all_dens, function(d) d$x))
y_range <- range(sapply(all_dens, function(d) d$y))
# 初始化适配全局范围的画布
plot(all_dens[[1]], xlim = x_range, ylim = y_range, main = "重叠密度图", xlab = "数值", ylab = "密度", col = 1)
# 叠加剩余曲线
for (i in 2:length(all_dens)) {
  lines(all_dens[[i]], col = i)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 12:24:02