【问题标题】:How to plot seaborn barplots as subplot?如何将 seaborn barplots 绘制为子图?
【发布时间】:2019-04-07 07:02:33
【问题描述】:

我想为数据框中的列列表创建子图。但是,当我运行下面的代码时,我得到了与轴相关的索引错误

TypeError: 'AxesSubplot' 对象不支持索引

%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt
nr_rows = 1
nr_cols = 3

cols_review = ['home_ownership', 'verification_status', 'loan_status']
li_col_reviews = list(cols_review)

fig, axs = plt.subplots(nr_rows, nr_cols, figsize=(nr_cols*4,nr_rows*3))

for r in range(0,nr_rows):
    for c in range(0, nr_cols):  
        col = r*nr_cols+c
        if col < len(li_col_reviews):
            col_count = pdf[li_col_reviews[col]].value_counts()
            sns.set(style="darkgrid")
            sns.barplot(col_count.index, col_count.values, alpha=0.9,ax = axs[r][c])
            plt.ylabel('Number of Occurrences', fontsize=12)
            plt.xlabel(col, fontsize=12)
            plt.tight_layout()    
            plt.show() 

【问题讨论】:

    标签: python pandas seaborn subplot


    【解决方案1】:

    您需要将squeeze=False添加到plt.subplots这一行

    在这里,我修改了您的代码并使用了一些虚拟数据。此外,您必须将plt.show() 保持在循环之外。

    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    nr_rows = 1
    nr_cols = 3
    
    cols_review = ['home_ownership', 'verification_status', 'loan_status']
    
    fig, axs = plt.subplots(nr_rows, nr_cols, figsize=(nr_cols*4,nr_rows*3), squeeze=False)
    
    for r in range(0,nr_rows):
        for c in range(0, nr_cols):  
            col = r*nr_cols+c
            if col < len(cols_review):
                x=np.random.rand(5) * 10
                y=np.random.rand(5)
                sns.set(style="darkgrid")
                sns.barplot(x, y, alpha=0.9,ax = axs[r][c])
                plt.ylabel('Number of Occurrences', fontsize=12)
                plt.xlabel(col, fontsize=12)
    plt.tight_layout()    
    plt.show()
    

    Squeeze 默认设置为 True,这意味着: extra dimensions are squeezed out from the returned array axs。因此无法使用[r][c] 进行索引。通过不挤压 (squeeze=False),您可以确保 axs 作为二维数组返回,然后可以使用 [r][c] 对其进行索引

    您可能想阅读squeeze 参数here

    【讨论】:

    • 旁注:li_col_reviews = list(cols_review) 没有用,因为cols_review 已经是一个列表
    猜你喜欢
    • 2021-05-10
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多