你需要先melt(转换为长格式)DataFrame:
data = df.melt(id_vars=['Categories'], var_name='dataset', value_name='values')
print(data)
打印:
Categories dataset values
0 A data1 2.0
1 A data2 4.0
2 C data1 4.0
3 C data2 5.0
4 B data1 5.0
5 B data2 4.0
6 A data1 10.0
7 A data2 4.2
8 B data1 9.0
9 B data2 3.0
10 C data1 3.0
11 C data2 3.0
现在你只需要使用dataset作为色调。由于情节非常繁忙,我将传说移到了它之外。
sns.boxplot(data=data, x='Categories', y='values', hue='dataset')
plt.legend(title='dataset', loc='upper left', bbox_to_anchor=(1, 1))
由OP编辑:
我在一个函数中实现了这个,使得它在一个ax中使用尽可能多的列来绘制并返回它。
def box_plot_columns(df,categories_c