2017-08-18 104 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