[英]How to plot seaborn barplots as subplot?
I want to create subplot for a list of columns from a data frame.我想为数据框中的列列表创建子图。 However, when I run the code below, I am getting indexing error associated with axes
但是,当我运行下面的代码时,出现与轴相关的索引错误
TypeError: 'AxesSubplot' object does not support indexing
类型错误:“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()
You will need to add squeeze=False
to the line plt.subplots
您需要在
plt.subplots
行中添加squeeze=False
Here I have modified your code and used some dummy data.在这里,我修改了您的代码并使用了一些虚拟数据。 Also you must keep
plt.show()
outside the loop.此外,您必须将
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 is set as True by default, which means that: extra dimensions are squeezed out from the returned array axs
. Squeeze 默认设置为 True,这意味着:
extra dimensions are squeezed out from the returned array axs
。 And hence cannot be indexed with [r][c]
.因此不能用
[r][c]
索引。 By not squeezing (squeeze=False) you ensure that axs
is returned as a 2D array which can then be indexed using [r][c]
通过不挤压 (squeeze=False),您可以确保
axs
作为二维数组返回,然后可以使用[r][c]
对其进行索引
You might want to read on the squeeze
argument here .您可能想在此处阅读
squeeze
参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.