适用数据:连续变量(如时间序列、浓度梯度、温度变化)。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 设置随机种子以确保可重复性
np.random.seed(42)
# 创建示例数据
x = np.arange(1, 6) # x轴数据
y = np.array([2, 3, 5, 4, 6]) # y轴均值
# 为每个点生成一些随机数据点来计算标准差和置信区间
data_points = np.array([np.random.normal(loc=val, scale=1.0, size=20) for val in y])
# 计算均值和标准差
means = np.mean(data_points, axis=1)
std_dev = np.std(data_points, axis=1, ddof=1) # 样本标准差
# 计算95%置信区间
confidence_intervals = []
for data in data_points:
ci = stats.t.interval(0.95, len(data)-1, loc=np.mean(data), scale=stats.sem(data))
confidence_intervals.append(ci)
confidence_intervals = np.array(confidence_intervals)
ci_lower = means - confidence_intervals[:, 0]
ci_upper = confidence_intervals[:, 1] - means
# 创建图形
plt.figure(figsize=(10, 6))
# 绘制带标准差误差线的折线图
plt.errorbar(x, means, yerr=std_dev, fmt='-o', capsize=5, capthick=2,
label='Mean ± Std Dev', color='blue')
# 绘制带置信区间误差线的折线图
plt.errorbar(x, means, yerr=[ci_lower, ci_upper], fmt='--o', capsize=5, capthick=2,
label='Mean ± 95% CI', color='green', alpha=0.5)
# 添加标题和标签
plt.title('Line Plot with Error Bars (Std Dev and Confidence Intervals)', fontsize=14)
plt.xlabel('X-axis', fontsize=12)
plt.ylabel('Y-axis', fontsize=12)
plt.xticks(x)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(fontsize=12)
# 显示图形
plt.tight_layout()
plt.show()
运行结果:
蓝色实线表示均值,误差线表示标准差
绿色虚线表示同样的均值,但误差线表示95%置信区间
随机种子设置为42,确保每次运行结果相同
可以根据需要调整以下参数:
np.random.seed() - 改变随机种子
scale参数 - 改变数据的离散程度
stats.t.interval()中的0.95 - 改变置信水平
figsize - 调整图形大小