如何用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
相关产品推荐
相关产品推荐

