web-dev-qa-db-ja.com

ループ内のSeabornプロット

Spyderを使用し、ループでSeabornカウントプロットをプロットしています。問題は、同じオブジェクト内でプロットが互いに重なり合っているように見えることと、プロットの最後のインスタンスのみが表示されることです。コンソールで各プロットを上下に表示するにはどうすればよいですか?

for col in df.columns:
   if  ((df[col].dtype == np.float64) | (df[col].dtype == np.int64)):
       i=0
       #Later
   else :
       print(col +' count plot \n') 
       sns.countplot(x =col, data =df)
       sns.plt.title(col +' count plot')        
11
Tronald Dump

ループごとに新しい図を作成したり、場合によっては異なる軸にプロットしたりできます。ループごとに新しい図を作成するコードを次に示します。また、int列とfloat列をより効率的に取得します。

df1 = df.select_dtypes([np.int, np.float])

for i, col in enumerate(df1.columns):
    plt.figure(i)
    sns.countplot(x=col, data=df1)
13
Ted Petrou

_sns.countplot_を呼び出す前に、新しいFigureを作成する必要があります。

_import matplotlib.pyplot as plt_をインポートしたと仮定すると、plt.figure()の直前にsns.countplot(...)を追加できます。

例えば:

_import matplotlib
import matplotlib.pyplot as plt
import seaborn

for x in some_list:
    df = create_df_with(x)
    plt.figure() #this creates a new figure on which your plot will appear
    seaborn.countplot(use_df);
_
11
jorgeh

コメントで質問に答えるには:すべてを単一の図にプロットする方法は?また、コンソールでプロットを上下に表示する代替方法も示します。

import matplotlib.pyplot as plt

df1 = df.select_dtypes([np.int, np.float])

n=len(df1.columns)
fig,ax = plt.subplots(n,1, figsize=(6,n*2), sharex=True)
for i in range(n):
    plt.sca(ax[i])
    col = df1.columns[i]
    sns.countplot(df1[col].values)
    ylabel(col);

ノート:

  • 列の値の範囲が異なる場合-sharex = Falseを設定または削除します
  • タイトルは不要:seabornは列名をxlabelとして自動的に挿入します
  • コンパクトビューの場合、コードスニペットのようにxlabelsをylabelに変更します
2
sherdim