Skip to main content
 首页 » 编程设计

均值的 python 图分布

2025年05月04日17tuyile006

我在 2015 年每天都有 500 个模拟。因此,我的数据如下:

from datetime import date, timedelta as td, datetime 
d1 = datetime.strptime('1/1/2015', "%m/%d/%Y") 
d2 = datetime.strptime('12/31/2015', "%m/%d/%Y") 
 
AllDays = [] 
while(d1<=d2): 
    AllDays.append(d1) 
    d1 = d1 + td(days=1) 

对于每一天,我有 500 个点代表当天的温度。

TempSims.shape 
(500,365) 

我想要一个二维图,其中 x 轴为日期,y 轴有一条线显示 2015 年每一天的模拟平均值,并且 500 个 sims 分布在平均值上以显示平均值与分布的叠加情况。

这是我在 python 中的第一个绘图,所以我很难实现它。

编辑: 我的数组是 numpy 数组,日期是日期时间。

编辑2: 我正在寻找这个例子中的情节:

请您参考如下方法:

正如 Andy Hayden 已经建议的那样,pandas 可能是一个非常好的选择:

from datetime import date, timedelta as td, datetime 
d1 = datetime.strptime('1/1/2015', "%m/%d/%Y") 
d2 = datetime.strptime('12/31/2015', "%m/%d/%Y") 
 
AllDays = [] 
while(d1<=d2): 
    AllDays.append(d1) 
    d1 = d1 + td(days=1) 
 
temps = np.random.normal( 20, 0.5, size=(500,365) ) 
temps = pd.DataFrame( temps.T, index=AllDays ) 
 
fig, ax = plt.subplots( 1, 1, figsize=(16,8) ) 
ax.plot( temps.index, temps.T.mean(), color='blue', linewidth=2 ) 

编辑:

添加了下一行来绘制您在示例中放置的区域。请注意,对于每个 x 值,您仅绘制 3 个 y 值:最大值、最小值和平均值。或者不管怎样,您当然可能想要绘制 Q1 和 Q3 或置信区间。我的观点是,您实际上不再需要 500 分(汇总统计数据非常棒 ^_^)

ax.fill_between( temps.index, y1=temps.T.max(), y2=temps.T.min(), color='gray', alpha=0.5) 
 
ax.set_ylabel('temperature [°C]') 
ax.set_xlabel('measuring date') 
ax.set_ylim([15,25]) 
 
plt.savefig('plot.png') 

注意: 如前所述,您实际上并不需要 pandas,但它在很多方面仍然很棒,您可能想尝试一下 ;)