想象一下,我有一个9列的数据框。我希望能够达到与df.hist()相同的效果,但是要使用sns.distplot()。
换句话说,我希望能够在3行3列的可视化中为数据框中的每一列绘制sns.distplot(),其中每个子图代表每列的唯一sns.distplot()数据框中的列总数。
我在数据框的轴和列上使用了for循环进行了一些实验,但是我只能实现指定列的结果。我不确定如何表示代码适用于行和列。
我也研究了sns.FacetGrid,但是我不确定如何使用FacetGrid解决此问题。
我发现df.hist()函数完全符合我的需要,但是我希望能够使用sns.distplot对与df.hist()输出相同表示的所有列进行处理。
如果这有助于放置数据框的上下文,那么我实质上是在阅读Google Colab针对加利福尼亚住房数据集的训练和测试集,其中包含了除了ocean_proximity之外的所有列。如果您想使用该数据集来解决此问题,请从Kaggle获取并删除ocean_proximity列。
我的9列方法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('housing.csv')
df.drop('ocean_proximity', axis=1, inplace=True)
fig, axes = plt.subplots(ncols=len(df.columns), figsize=(30,15))
for ax, col in zip(axes, df.columns):
sns.distplot(df[col], ax=ax)
plt.tight_layout()
plt.show()
答案 0 :(得分:4)
比@Bruce Swain 的解决方案更优雅的 imo:
import matplotlib.pyplot as plt
import seaborn as sns
for i, column in enumerate(df.columns, 1):
plt.subplot(3,3,i)
sns.histplot(df[column])
答案 1 :(得分:1)
您可以使用像这样的子图使用matplotlib创建多个figyre
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=3, ncols=3)
然后,您可以使用ax = axes [nrow,ncol]指定要在其中打印的子图,并使用ax参数在不同的子图中绘制各列:
for i, column in enumerate(df.columns):
sns.distplot(df[column],ax=axes[i//3,i%3])
答案 2 :(得分:0)
这应该有效:
fig, axes = plt.subplots(nrows = 3, ncols = 3) # axes is 2d array (3x3)
axes = axes.flatten() # Convert axes to 1d array of length 9
fig.set_size_inches(15, 15)
for ax, col in zip(axes, train.columns):
sns.distplot(train[col], ax = ax)
ax.set_title(col)