python - 当 N 未知时,用 1 个地块绘制 N
python - plotting N by 1 number of plots when N is unknown
我目前正在使用 seaborn 在 4 轴上绘制多个图。为了做到这一点,我一次手动 select nrows=4 然后 运行 4 个箱线图。
import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline
data=np.random.randn(1000)
label = ['A','B','C','D'] * 250
df = pd.DataFrame(
{'label': prod1,
'data': data
})
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=4, sharey=True)
fig.set_size_inches(12, 16)
sns.boxplot(data=df[df['label']=='A'], y='data', ax=ax1)
sns.boxplot(data=df[df['label']=='B'], y='data', ax=ax2)
sns.boxplot(data=df[df['label']=='C'], y='data', ax=ax3)
sns.boxplot(data=df[df['label']=='D'], y='data', ax=ax4)
我想重写这个函数,让它自动识别标签的唯一数量,自动创建轴数,然后绘图。
有谁知道我怎样才能做到这一点?谢谢。
作业
fig, ax = plt.subplots(nrows=4, sharey=True)
makes ax
a NumPy array of axes。该数组可以是一维或二维的(取决于 nrows
和 ncols
参数的值),
所以调用 ax.ravel()
用于确保它是一维的。
现在您可以循环 zip(label, ax.ravel())
为每个标签和轴调用一次 sns.boxplot
。
fig, ax = plt.subplots(nrows=4, sharey=True)
fig.set_size_inches(12, 16)
for labeli, axi in zip(label, ax.ravel()):
sns.boxplot(data=df[df['label']==labeli], y='data', ax=axi)
注意 zip
在最短的迭代器结束时结束。所以尽管
label
的长度为 1000,循环中只使用了前 4 项,因为那里
只有4个轴。
或者,只需分配 label = ['A','B','C','D']
,因为该变量未在其他任何地方使用(至少,未在发布的代码中使用)。
我目前正在使用 seaborn 在 4 轴上绘制多个图。为了做到这一点,我一次手动 select nrows=4 然后 运行 4 个箱线图。
import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline
data=np.random.randn(1000)
label = ['A','B','C','D'] * 250
df = pd.DataFrame(
{'label': prod1,
'data': data
})
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=4, sharey=True)
fig.set_size_inches(12, 16)
sns.boxplot(data=df[df['label']=='A'], y='data', ax=ax1)
sns.boxplot(data=df[df['label']=='B'], y='data', ax=ax2)
sns.boxplot(data=df[df['label']=='C'], y='data', ax=ax3)
sns.boxplot(data=df[df['label']=='D'], y='data', ax=ax4)
我想重写这个函数,让它自动识别标签的唯一数量,自动创建轴数,然后绘图。
有谁知道我怎样才能做到这一点?谢谢。
作业
fig, ax = plt.subplots(nrows=4, sharey=True)
makes ax
a NumPy array of axes。该数组可以是一维或二维的(取决于 nrows
和 ncols
参数的值),
所以调用 ax.ravel()
用于确保它是一维的。
现在您可以循环 zip(label, ax.ravel())
为每个标签和轴调用一次 sns.boxplot
。
fig, ax = plt.subplots(nrows=4, sharey=True)
fig.set_size_inches(12, 16)
for labeli, axi in zip(label, ax.ravel()):
sns.boxplot(data=df[df['label']==labeli], y='data', ax=axi)
注意 zip
在最短的迭代器结束时结束。所以尽管
label
的长度为 1000,循环中只使用了前 4 项,因为那里
只有4个轴。
或者,只需分配 label = ['A','B','C','D']
,因为该变量未在其他任何地方使用(至少,未在发布的代码中使用)。