如何使用matplotlib并排显示直方图

1 投票
1 回答
24 浏览
提问于 2025-04-13 21:11

我想看看不同的分布是怎么根据标志列(flag column)变化的:

示例数据:

np.random.seed(0)
df = pd.DataFrame({'col1' : np.random.uniform(size = 100),
                  'col2' : np.random.uniform(size = 100),
                  'col3' : np.random.uniform(size = 100),
                  'flag' : np.random.choice([0,1], 100)})
df
    col1        col2        col3        flag
0   0.548814    0.677817    0.311796    0
1   0.715189    0.270008    0.696343    0
2   0.602763    0.735194    0.377752    1
3   0.544883    0.962189    0.179604    1
4   0.423655    0.248753    0.024679    1
... ... ... ... ...
95  0.183191    0.490459    0.224317    0
96  0.586513    0.227415    0.097844    0
97  0.020108    0.254356    0.862192    0
98  0.828940    0.058029    0.972919    1
99  0.004695    0.434417    0.960835    0

我可以通过两个 for 循环来查看直方图,一个用于 flag == 0,另一个用于 flag == 1,代码如下:

for col in df.loc[df['flag'] == 0, ['col1', 'col2', 'col3']].columns:
    plt.hist(df[col])
    plt.title(col)
    plt.show()

有人能告诉我,是否可以生成这样的可视化效果:把每一列的直方图并排放置,分别对应不同的 flag 列吗?

1 个回答

2

非常适合这个:

import seaborn as sns
...
sns.displot(df.melt(id_vars='flag'), row='variable', col='flag', x='value')

输出结果:

在这里输入图片描述

撰写回答