2017-08-18 49 views
1

我创建了数据帧多个分类地块DF与一个循环回路分类情节安排多个:与Seaborn

object_bol = df.dtypes == 'object' 
for catplot in df.dtypes[object_bol].index: 
    sns.countplot(y=catplot,data=df) 

plt.show() 

输出是所有地块后,其他测序一个,我怎么分配这一个具有n列和m行的网格(根据数据帧中对象的数量而不同)?

+4

你有样本数据?我想你应该看看[FacetGrid](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html)。 –

+0

使用通常的'plt.subplots' meachnism可能也不错,但是如果没有对输入数据和期望结果的全面解释,这个问题可能不会被回答。 – ImportanceOfBeingErnest

+0

输入数据是一个数据框,可以说20个变量,其中15个是分类的,因此用类型对象对它们进行过滤。上面的for循环计算每个分类变量的图表,但在单个列中。这适用于小型数据集,但具有20+分类变量的数据集非常繁琐,无法向下滚动,我希望这些20+图能够排列在网格中,让我们看到4列和5行。希望有助于更好地理解问题。 – mickeyt500

回答

2

您可能想要将How do I plot two countplot graphs side by side in seaborn?的示例扩展到更多的子图。

import numpy as np 
import seaborn as sns 
import pandas as pd 
import matplotlib.pyplot as plt 

df=pd.DataFrame(np.random.choice(list("abcd"), size=(100,20), p=[.4,.3,.2,.1])) 

fig, axes =plt.subplots(5,4, figsize=(10,10), sharex=True) 
axes = axes.flatten() 
object_bol = df.dtypes == 'object' 
for ax, catplot in zip(axes, df.dtypes[object_bol].index): 
    sns.countplot(y=catplot, data=df, ax=ax, order=np.unique(df.values)) 

plt.tight_layout() 
plt.show() 

enter image description here

你会从熊猫直接获得不seaborn类似的东西:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

df=pd.DataFrame(np.random.choice(list("abcd"), size=(100,20), p=[.4,.3,.2,.1])) 

df.apply(pd.value_counts).plot(kind="barh", subplots=True, layout=(4,5), legend=False) 

plt.tight_layout() 
plt.show() 

enter image description here