我在下面有一个df,我想创建3个散点图(天vs A,天vs B,天vs C),显示所有数据点以及一条通过每天平均值的线。
例如, plt.plot(df.iloc[:,0],df.iloc[:,3], 'b')
给我一条穿过每个单点的线(第3个图),但是我想要一条穿过平均值的线。
这是我的代码:
data=np.array([[1,4.4,40.1,55],
[1,4.5,40.6,45.6],
[1,4.4,41.5,61.3],
[4,10,26,79.4],
[4,11.2,25.3,80.9],
[4,10.5,23.6,84],
[10,5.6,12.7,58.2],
[10,6,10.9,60.8],
[10,7.3,8.7,70.5,],
[15,2.5,5.4,98.7],
[15,2.7,6.2,95.3],
[15,2.8,4.7,88.9],
[25,0.8,3.3,25.4],
[25,0.5,1,28.6],
[25,1,5,23.6]])
df = pd.DataFrame(data[:,0:],columns=['days','A','B','C'])
plt.subplot(3, 1, 1)
plt.plot(df.iloc[:,0],df.iloc[:,1], 'ro')
plt.subplot(3, 1, 2)
plt.plot(df.iloc[:,0],df.iloc[:,2], 'ro')
plt.subplot(3, 1, 3)
plt.plot(df.iloc[:,0],df.iloc[:,3], 'ro')
plt.plot(df.iloc[:,0],df.iloc[:,3], 'b')
答案 0 :(得分:0)
您应该只创建一个带有平均值的向量并将其绘制出来:
plt.plot(df.iloc[:,0], df.iloc[:,3].mean() + np.zeros_like(df.iloc[:,3]), 'g--')
答案 1 :(得分:0)
您可以使用groupby
对值进行分组,然后绘制平均值。从this答案改编了用于分组和查找均值的方法。其余部分是绘图部分。
df = pd.DataFrame(data[:,0:],columns=['days','A','B','C'])
df_mean = df.groupby('days')['A','B','C'].mean()
plt.subplot(3, 1, 1)
plt.plot(df.iloc[:,0],df.iloc[:,1], 'ro')
plt.plot(df_mean.index, df_mean['A'], '-r')
plt.subplot(3, 1, 2)
plt.plot(df.iloc[:,0],df.iloc[:,2], 'ro')
plt.plot(df_mean.index, df_mean['B'], '-r')
plt.subplot(3, 1, 3)
plt.plot(df.iloc[:,0],df.iloc[:,3], 'ro')
plt.plot(df_mean.index, df_mean['C'], '-r')