这是我当前的代码,我想将数据分组到我的箱线图中,而不是对所有指定数据的单个箱线图。另外,如何旋转xtick标签?
plt.figure(figsize=(12,8), dpi=100)
plt.style.use('default')
plt.setp(ax.get_xticklabels(), rotation = 90)
compressor_room_temperature = df1['Compressor Room Temperature']
compressor_outlet_temperature = df1['Compressor Outlet Temperature']
compressor_inlet_temperature = df1['Compressor Inlet Temperature']
aircon_outlet_temperature = df1['Aircon Outlet Temperature']
compressor_room_temperature2 = df2['Compressor Room Temperature']
compressor_outlet_temperature2 = df2['Compressor Outlet Temperature']
compressor_inlet_temperature2 = df2['Compressor Inlet Temperature']
aircon_outlet_temperature2 = df2['Aircon Outlet Temperature']
compressor_room_temperature3 = df3['Compressor Room Temperature']
compressor_outlet_temperature3 = df3['Compressor Outlet Temperature']
compressor_inlet_temperature3 = df3['Compressor Inlet Temperature']
aircon_outlet_temperature3 = df3['Aircon Outlet Temperature']
bp = plt.boxplot([compressor_room_temperature, compressor_outlet_temperature, compressor_inlet_temperature, aircon_outlet_temperature, compressor_room_temperature2, compressor_outlet_temperature2, compressor_inlet_temperature2, aircon_outlet_temperature2, compressor_room_temperature3, compressor_outlet_temperature3, compressor_inlet_temperature3, aircon_outlet_temperature3], labels=['Compressor Room Temperature','Compressor Outlet Temperature','Compressor Inlet Temperature','Aircon Outlet Temperature','Compressor Room Temperature2','Compressor Outlet Temperature2','Compressor Inlet Temperature2','Aircon Outlet Temperature2','Compressor Room Temperature3','Compressor Outlet Temperature3','Compressor Inlet Temperature3','Aircon Outlet Temperature3'], patch_artist=True, medianprops={'linewidth': 2})
# plt.setp(ax.get_xticklabels(),rotation=45)
plt.title('Analyzing Temperature Data from Sensors placed across an Aircon system')
plt.ylabel('Temperature')
for box in bp['boxes']:
box.set(color='#4286f4', linewidth=2)
box.set(facecolor = '#e0e0e0' )
plt.show()
我当前的箱线图
基本上,我希望我的箱形图如下所示
答案 0 :(得分:0)
一种简单的方法是创建3个轴,中间没有空格,然后将每个数据框分别绘制在各自的轴上
label1 = 'dataset 1'
label2 = 'dataset 2'
label3 = 'dataset 3'
df1 = pd.DataFrame({'Compressor Room Temperature': np.random.normal(loc=10, size=(100,)),
'Compressor Outlet Temperature': np.random.normal(loc=10, size=(100,)),
'Compressor Inlet Temperature':np.random.normal(loc=10, size=(100,)),
'Aircon Outlet Temperature':np.random.normal(loc=10, size=(100,))
})
df2 = pd.DataFrame({'Compressor Room Temperature': np.random.normal(loc=5, size=(100,)),
'Compressor Outlet Temperature': np.random.normal(loc=5, size=(100,)),
'Compressor Inlet Temperature':np.random.normal(loc=5, size=(100,)),
'Aircon Outlet Temperature':np.random.normal(loc=5, size=(100,))
})
df3 = pd.DataFrame({'Compressor Room Temperature': np.random.normal(loc=15, size=(100,)),
'Compressor Outlet Temperature': np.random.normal(loc=15, size=(100,)),
'Compressor Inlet Temperature':np.random.normal(loc=15, size=(100,)),
'Aircon Outlet Temperature':np.random.normal(loc=15, size=(100,))
})
fig, axs = plt.subplots(1,3, gridspec_kw=dict(wspace=0), sharey=True)
for ax,df,label in zip(axs,[df1,df2,df3],[label1, label2, label3]):
ax.boxplot(df.T)
ax.set_xticklabels(df.columns, rotation='90')
ax.set_xlabel(label)
fig.tight_layout()