首页 > 解决方案 > 使用 sns distplot 创建绘图矩阵

问题描述

我正在绘制 20 多个这样的功能:

for col in dsd_mod["ae_analysis"].columns[:len(dsd_mod["ae_analysis"].columns)]:
    if col != "sae_flag":
        sns.distplot(dsd_mod["ae_analysis"].loc[(dsd_mod["ae_analysis"]['sae_flag'] == 1),col],
                color='r',
                kde=True,
                hist=False,
                label='sae_ae = 1')
        sns.distplot(dsd_mod["ae_analysis"].loc[(dsd_mod["ae_analysis"]['sae_flag'] == 0),col],
                color='y',
                kde=True,
                hist=False,
                label='sae_ae = 0') 

它为每个特征创建一个单独的图表。我怎样才能把这些都放在一个矩阵上?或者像对如何绘制输出一样?

现在我在一列中得到了 30 个这样的图表: 在此处输入图像描述

如何修改它以便获得 6 行和 5 列?

提前致谢!

标签: pythonmatplotlibplotseaborn

解决方案


displot可以使用您想要绘制绘图的任何轴对象。因此,您只需要创建具有所需几何形状的轴,并将相关轴传递给您的函数。

fig, axs = plt.subplots(6,5)
# axs is a 2D array with shape (6,5)
# you can keep track of counters in your for-loop to place the resulting graphs
# using ax=axs[i,j]
# or an alternative is to use a generator that you can use to get the next axes
# instance at every step of the loop
ax_iter = iter(axs.flat)
for _ in range(30):
    ax = next(ax_iter)
    sns.distplot(np.random.normal(loc=0, size=(1000,)), ax=ax)
    sns.distplot(np.random.normal(loc=1, size=(1000,)), ax=ax)

在此处输入图像描述


推荐阅读