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

如何在R中对多条密度曲线取平均以获取平均趋势

获取多条密度曲线的平均趋势曲线方法

要得到多条密度曲线的平均趋势,核心是先统一所有曲线的x轴网格,再对每个x点的y值求平均,具体实现步骤如下:

步骤1:统一x轴网格

每条density()输出的x序列可能略有差异,我们需要先确定一个覆盖所有曲线x范围的公共网格,用所有曲线x值的最小值和最大值生成等距序列即可。

步骤2:插值获取每个x点的y值

对每条密度曲线,在公共x网格上插值得到对应的密度值(y),确保所有曲线在相同的x点上有对应可比较的y值。

步骤3:计算平均密度值

对每个x点,计算所有曲线对应y值的平均值,得到最终的平均密度曲线。

完整实现代码

set.seed(06062023)
my_values = list(rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),
                      rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10))

# 生成每条数据的密度曲线
den <- lapply(my_values, density)

# 1. 确定公共x网格:覆盖所有曲线的x范围,生成1000个等距点
all_x <- unlist(lapply(den, function(d) d$x))
x_grid <- seq(min(all_x), max(all_x), length.out = 1000)

# 2. 对每条密度曲线插值,得到在x_grid上的y值
interp_ys <- lapply(den, function(d) approx(d$x, d$y, xout = x_grid)$y)

# 3. 转换为矩阵,计算每个x点的平均y值
y_matrix <- do.call(rbind, interp_ys)
mean_y <- colMeans(y_matrix, na.rm = TRUE)

# 绘制原图+平均曲线
plot(den[[1]], ylim=c(0,0.8), xlim=c(-6,6), main='Densities with Average Trend') 
for(i in 2:length(den)){        
  lines(den[[i]], col=i)        
}
# 添加平均曲线,用粗体红色突出
lines(x_grid, mean_y, col = "red", lwd = 2)
legend("topright", legend = c("Individual Densities", "Average Trend"),
       col = c("black", "red"), lwd = c(1, 2))

代码说明

  • approx()函数用于线性插值,解决不同密度曲线x轴不统一的问题;
  • colMeans()直接对矩阵的列(对应同一个x点的所有y值)求平均,高效计算平均密度;
  • 用粗红线条绘制平均曲线,和原有曲线形成对比,清晰展示整体趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:40:23