matplotlib 带最小值、最大值和平均值的Python线性图表

fwzugrvs  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(451)

我想知道如何在Python中创建一个线图,显示给定时期的最大值、最小值和平均值。我对这种语言了解不多,也不知道如何使一个x有3个y值。我想创建这样的线图:

我试着这样做第一列是纪元,第二个改编。

import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')

data = df.groupby(["epoch"],as_index=False).agg({'adaptation':{np.max, np.min, np.mean}})
data.reset_index(inplace=True)

ax = data.plot(x='epoch', y='adaptation', c='white')
plt.fill_between(x='epoch', y1='Low Value', y2='High Value', data=data)

plt.show()

但它不工作。我的数据data.csv:

epoch,adaptation
0,11538314
0,0
0,11983512
0,12897261
0,0
0,0
0,0
0,8931799
0,12849768
0,11138070
0,0
0,12522918
0,0
0,11309842
1,0
1,0
1,9626928
1,11579548
1,10486644
1,11085142
1,8866995
1,12704713
1,0
1,0
1,0
1,11435553
1,0
1,11833946
1,8031767
1,7454479
1,0
1,0
1,13015695
1,10756224
1,0
1,12295841
1,0
1,12224471
2,0
2,7088825
2,12784235
2,12823529
2,10266321
2,0
2,0
2,12671855
2,7107685
3,0
3,9771319
3,13072968
3,8451687
3,9556870
3,0
3,8557863
4,12200947
4,11080982
4,10201426
4,12249544
4,11955293
4,11910369
4,12048186
4,10688168
4,0
4,9276116

依此类推,每个历元具有相同数量的自适应记录

nfzehxib

nfzehxib1#

可以使用命名聚合为每个时期的minmaxmean创建列。然后可以使用data.plot绘制mean(平均值),并使用plt.fill_between填充minmax值之间的区域。

import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

df = pd.read_csv('data.csv')

data = df.groupby(["epoch"],as_index=False).agg(
    min=pd.NamedAgg(column="adaptation", aggfunc="min"),
    max=pd.NamedAgg(column="adaptation", aggfunc="max"),
    mean=pd.NamedAgg(column="adaptation", aggfunc=np.mean))
data.reset_index(inplace=True)

ax = data.plot(x='epoch', y='mean', c='brown')
ax.fill_between(x='epoch', y1='min', y2='max', data=data,
                color=mpl.colors.to_rgba('brown', 0.15))
plt.show()

对于您提供的数据,折线图将被完全填充,因为您的min值在每个时期都是0,并且您的max值在每个时期都是相似的。您的数据的图形将如下所示:

如果每个历元的minmax值更接近mean值,并遵循其趋势,这种可视化方法将更有意义,如下面使用自定义数据生成的图像所示:

相关问题