python - 分组箱线图

标签 python dataframe matplotlib

这是我当前的代码,我想将数据分组到箱线图中,而不是指定所有数据的单个箱线图。另外,如何旋转 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()

我当前的箱线图

enter image description here

本质上,我希望我的箱线图如下所示

enter image description here

最佳答案

一种简单的方法是创建 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()

enter image description here

关于python - 分组箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60089742/

相关文章:

python - 重新索引排序的 pandas 数据框

python - 用图像替换 Matplotlib 图例的标签

python - PyMongo find_one 不返回现有条目

python - 从 python 中的现有列创建新列

python - 我何时将类的实例作为 self 传递给方法?

python - Pandas:循环每一行,提取特征并创建新列

numpy - 为 Matplotlib 的 LineCollection 构建段列表

python - 读取一个输入文件并绘制多个

python - 在 django 模型中自动生成席位

python - 使用 python 导出 Sympy Latex