使用Seaborn创建for循环以绘制DataFrame各列的直方图

8

我想用一个for循环绘制DataFrame中所有连续变量的直方图。我已经使用以下代码对分类变量进行了绘制:

df1 = df.select_dtypes([np.object])

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

我通过在stackoverflow上搜索找到了这个答案。

但是现在我想使用distplot做同样的事情,所以我尝试修改上面的代码为:

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

for i, col in enumerate(df1.columns):
    plt.figure(i)
    sns.distplot(df1)

但是它只给了我一个空的图。有什么想法可以解决吗?
编辑:DataFrame的例子:
dftest = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                    columns=['a', 'b', 'c', 'd', 'e']) 

看起来你忘记在这里提供一个 [mcve]。 - ImportanceOfBeingErnest
我的错,我添加了一个编辑以便它可以被重现。 - Thomas Quick
2个回答

12

sns.distplot已被sns.histplot取代。请参考模拟弃用的seaborn distplots以匹配distplot

for i, col in enumerate(df1.columns):
    plt.figure(i)
    sns.histplot(df1[col], stat='density', kde=True, kde_kws={"cut": 3})

看起来你想要为数据框的每一列生成一个distplot图。因此,你需要为每个特定的图指定使用的数据。

正如seaborn文档中对distplot(a, ...)所说:

a:Series、1d-array或列表。观察到的数据。

所以在这种情况下:

for i, col in enumerate(df1.columns):
    plt.figure(i)
    sns.distplot(df1[col])

多么简单的修复!非常感谢!现在我只需要弄清楚如何处理我的缺失值并绘制所有内容!祝一切顺利! - Thomas Quick
我该如何在一个大图中实现它,并在其中放置多个小图表?@mportanceOfBeingErnest - TapanHP

5

定义一个绘制直方图的函数

def histograms_plot(dataframe, features, rows, cols):

fig=plt.figure(figsize=(20,20))
for i, feature in enumerate(features):
    ax=fig.add_subplot(rows,cols,i+1)
    dataframe[feature].hist(bins=20,ax=ax,facecolor='green')
    ax.set_title(feature+" Distribution",color='red')

fig.tight_layout()  
plt.show()

histograms_plot(df,df.columns,6,3)


谢谢。如何缩放子图,使得x轴相同? - postcolonialist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接