如何绘制散点图的平均线?

时间:2019-01-15 20:46:25

标签: python matplotlib data-visualization

我在下面有一个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')

2 个答案:

答案 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')

enter image description here