Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为Dataframe中的所有列绘制Seaborn DistPlot矩阵_Python_Pandas_Seaborn - Fatal编程技术网

Python 如何为Dataframe中的所有列绘制Seaborn DistPlot矩阵

Python 如何为Dataframe中的所有列绘制Seaborn DistPlot矩阵,python,pandas,seaborn,Python,Pandas,Seaborn,假设我有一个9列的数据框。我希望能够实现与df.hist()相同的效果,但是使用sns.distplot() 换句话说,我希望能够以3行3列的可视化方式绘制数据帧中每列的sns.distplot(),其中每个子图表示数据帧中每列的总列数的唯一sns.distplot() 我尝试过在数据帧的轴和列上使用for循环,但我只能在指定列时获得结果。我不知道如何表示用于行和列的代码 我还研究了sns.FacetGrid,但我不确定如何使用FacetGrid解决这个问题 我发现df.hist()函数正是我想

假设我有一个9列的数据框。我希望能够实现与df.hist()相同的效果,但是使用sns.distplot()

换句话说,我希望能够以3行3列的可视化方式绘制数据帧中每列的sns.distplot(),其中每个子图表示数据帧中每列的总列数的唯一sns.distplot()

我尝试过在数据帧的轴和列上使用for循环,但我只能在指定列时获得结果。我不知道如何表示用于行和列的代码

我还研究了sns.FacetGrid,但我不确定如何使用FacetGrid解决这个问题

我发现df.hist()函数正是我想要的,但我希望能够使用sns.distplot为df.hist()输出的相同表示形式中的所有列执行此操作

如果这有助于理解数据框架的上下文,我基本上是在阅读Google Colab针对加利福尼亚住房数据集的培训和测试集,该数据集包含除ocean_邻近性之外的所有列。如果您想使用该数据集帮助我解决此问题,请从Kaggle获取该数据集并删除ocean_邻近列

我对9列的做法:

将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
df=pd.read\u csv('housing.csv')
落差('ocean_Proximition',轴=1,原地=True)
图,轴=plt.子批次(ncols=len(df.列),figsize=(30,15))
对于ax,zip中的列(轴、方向列):
sns.distplot(df[col],ax=ax)
plt.紧_布局()
plt.show()

您可以使用matplotlib创建多个地物,如下图所示

import matplotlib.pyplot as plt
# Define the number of rows and columns you want
n_rows=3
n_cols=3
# Create the subplots
fig, axes = plt.subplots(nrows=n_rows, ncols=n_cols)
您可以将此函数视为创建形状为[n_行,n_列]的矩阵(2D数组),并使用矩阵元素的坐标选择打印位置

然后使用
ax
参数将每列绘制在不同的子图中,以给出矩阵元素的坐标。使用
ax=axes[i,j]
将指定要打印的子批次:

for i, column in enumerate(df.columns):
    sns.distplot(df[column],ax=axes[i//n_cols,i%n_cols])
从BenCaldwell注释“i//ncols给出的楼层分割是从左到右再从上到下工作时的行。i%ncols将给出整数余数,即从左到右再从上到下工作时的列。”


如果要绘制离散数据集而不是使用distplot来估计数据背后的数据分布,可以使用新函数。

比@Bruce Swain的解决方案稍微优雅一些:

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])
这应该起作用:

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)

漂亮的解决方案,布鲁斯!非常感谢你。我得到了我想要的可视化效果:)如果你也能附上图像,那就太好了。这将对用户有所帮助。imo稍微优雅一点:``将matplotlib.pyplot作为plt导入enumerate(df.columns)中的i列:sns.distplot(df[column],ax=axes[i//3,i%3])``示例中不清楚,因为nrows和ncol是相同的,但ncol应该用于计算轴的两个维度:
sns.distplot(df[column],ax=轴[i//ncols,i%ncols])
@BruceSwain我的示例在2行7列上运行良好。
i//ncols
给出了从左到右再从上到下的行划分。
i%ncols
将给出从左到右从上到下的列的整数余数。