Seaborn在一个循环中绘制

Tro*_*ump 11 python matplotlib pandas 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')        
Run Code Online (Sandbox Code Playgroud)

Ted*_*rou 14

您可以在每个循环中创建一个新图形,也可以在不同的轴上绘制.这是代码,每个循环创建新的数字.它还可以更有效地抓取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)
Run Code Online (Sandbox Code Playgroud)

  • 如果我想将所有内容绘制在一张图中,而不是一个在另一个图中,我该怎么做? (2认同)
  • ``` fig,ax = subplots(n,1, figsize=(6,12), sharex=True) for i in range(n): sca(ax[i]) sns.countplot(x=col, data= df1) ``` 根据您的需要更改图形的大小。 (2认同)

jor*_*geh 11

在打电话之前,sns.countplot你需要创建一个新的数字.

假设你已经进口的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);
Run Code Online (Sandbox Code Playgroud)


she*_*dim 6

回答评论中的问题:如何在单个图中绘制所有内容?我还展示了另一种在控制台中查看绘图的方法。

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);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果列中的值范围不同 - 设置 sharex=False 或将其删除
  • 无需标题:seaborn 自动将列名插入为 xlabel
  • 对于紧凑视图,如代码片段中那样将 xlabels 更改为 ylabel

  • `将 matplotlib.pyplot 导入为 plt` `plt.sca(1)` (2认同)