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

如何用Python绘制多个numpy数组均值线并填充置信区间?

解决方案

第一步:数据预处理

先把所有数组截断到最短长度,再转换成二维数组,方便统一计算统计量:

import numpy as np

# 假设你的数据是包含数百个numpy数组的列表
data = [np.random.rand(2000) for _ in range(100)]
# 模拟几个长度不一致的数组(匹配你的实际场景)
data[0] = np.random.rand(1980)
data[10] = np.random.rand(1990)

# 找出所有数组中的最短长度
min_length = min(len(arr) for arr in data)
# 截断每个数组到最短长度,再堆叠成二维数组(shape: [样本数, 截断后长度])
truncated_data = np.stack([arr[:min_length] for arr in data])

第二步:计算统计量

基于截断后的二维数组,计算均值、5%和95%分位数:

# 沿样本轴(axis=0)计算均值
mean_line = np.mean(truncated_data, axis=0)
# 计算5%和95%分位数作为置信区间上下限
ci_lower = np.percentile(truncated_data, 5, axis=0)
ci_upper = np.percentile(truncated_data, 95, axis=0)
# 生成x轴坐标(对应每个数据点的索引)
x = np.arange(min_length)

Matplotlib 实现

用matplotlib绘制均值线并填充置信区间:

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
# 绘制均值线
plt.plot(x, mean_line, color='#1f77b4', label='均值')
# 填充5%-95%置信区间
plt.fill_between(x, ci_lower, ci_upper, color='#1f77b4', alpha=0.2, label='5%-95% 置信区间')

# 配置图表标签和标题
plt.xlabel('数据点索引')
plt.ylabel('数值')
plt.title('均值线与置信区间')
plt.legend()
plt.show()

Plotly 实现

用plotly生成交互式图表:

import plotly.graph_objects as go

fig = go.Figure()

# 添加均值线
fig.add_trace(go.Scatter(
    x=x, y=mean_line,
    mode='lines',
    name='均值',
    line=dict(color='#1f77b4')
))

# 添加置信区间填充(需将x和y首尾拼接形成闭合区域)
fig.add_trace(go.Scatter(
    x=np.concatenate([x, x[::-1]]),
    y=np.concatenate([ci_upper, ci_lower[::-1]]),
    fill='toself',
    fillcolor='rgba(31, 119, 180, 0.2)',
    line=dict(color='rgba(0,0,0,0)'),  # 隐藏填充区域的边框
    name='5%-95% 置信区间'
))

# 配置图表布局
fig.update_layout(
    xaxis_title='数据点索引',
    yaxis_title='数值',
    title='均值线与置信区间',
    showlegend=True
)

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:25:37