【问题标题】:How to remove the extra figures created when running a for loop to create seaborn plots如何删除运行 for 循环以创建 seaborn 绘图时创建的额外图形
【发布时间】:2020-04-16 12:20:33
【问题描述】:

我正在尝试在探索 Matplotlib 和 Seaborn 库的同时进行 EDA。

data_cat DataFrame 有 4 列,我想在 4 列的单行中创建图。 为此,我创建了一个带有 4 个轴对象的图形对象。

fig, ax = plt.subplots(1,4, figsize = (16,4))
for i in range(len(data_cat.columns)):
    sns.catplot(x = data_cat.columns[i], kind = 'count', data = data_cat, ax= ax[i])

它的输出是一个带有 4 个图的图形(根据需要),但后面跟着 4 个空白图,我认为它们是 sns.catplot 函数生成的额外图形对象。

【问题讨论】:

    标签: python matplotlib seaborn subplot


    【解决方案1】:

    您的代码无法按预期工作,因为sns.catplot() 是一个图形级函数,旨在根据需要创建自己的子图网格。因此,如果您想直接在 matplotlib 中设置子图网格,就像使用第一行一样,您应该使用适当的轴级别函数,在本例中为 sns.countplot()

    fig, ax = plt.subplots(1, 4, figsize = (16,4))
    for i in range(4):
        sns.countplot(x = data_cat.columns[i], data = data_cat, ax= ax[i])
    

    或者,您可以使用 pandas 的 df.melt() 方法来整理您的数据集,以便您的四列中的所有值都在一个列中(例如 'col_all'),而您还有另一列(例如 'subplot')标识每个值来自哪个原始列。然后你可以一键获取所有子图:

    sns.catplot(x='col_all', kind='count', data=data_cat, col='subplot')
    

    我回答了一个相关问题here

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 2019-12-09
      • 2014-07-11
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多