Простой способ - создать 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](https://i.stack.imgur.com/7XAMF.png)