python - Pandas 散点矩阵 - 直方图是什么意思?

标签 python pandas matplotlib

我不理解 Pandas 散点矩阵中的直方图。

我绘制了 iris 数据集的散点矩阵。

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt

iris = datasets.load_iris()
X = iris.data
y = iris.target
df = pd.DataFrame(X, columns=iris.feature_names)

_ = pd.plotting.scatter_matrix(df, c=y, figsize=[8, 8], s=150, marker='D')

看起来像这样。

enter image description here

第一个直方图看起来频率不正确,所以我自己对列进行了分箱。

df['sep_len_bin'] = pd.cut(df['sepal length (cm)'], 10)
print(df.sep_len_bin.value_counts().sort_index())

我得到了这些结果。这些频率似乎与散点矩阵中的第一个直方图不匹配。

(4.296, 4.66]     9
(4.66, 5.02]     23
(5.02, 5.38]     14
(5.38, 5.74]     27
(5.74, 6.1]      22
(6.1, 6.46]      20
(6.46, 6.82]     18
(6.82, 7.18]      6
(7.18, 7.54]      5
(7.54, 7.9]       6
Name: sep_len_bin, dtype: int64

然后我自己绘制了一个直方图。

plt.hist(df['sepal length (cm)'], bins=10)

该图与我制作的箱子相匹配。分布与散点矩阵中的第一个直方图具有相同的形状,但为什么散点矩阵直方图具有不同的频率?

enter image description here

最佳答案

所有散点图都将根据所比较的两个变量的范围具有单位和刻度线,而对角线子图是分析一个变量的直方图。请注意,y 轴的所有单位都是 cm匹配数据,但直方图不会以 cm 为单位而是频率。

因此没有显示直方图的频率,因为我猜不清楚这些刻度线应该出现在哪里,但我同意这可能会造成混淆。

顺便说一句,如果您改为绘制 kde,则不会显示刻度线,但整体形状与直方图一样正确。

_ = pd.plotting.scatter_matrix(df, c=y, figsize=[8, 8], s=150, marker='D', diagonal='kde')

enter image description here

关于python - Pandas 散点矩阵 - 直方图是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65452754/

相关文章:

python,如何将 pandas 系列转换为 pandas DataFrame?

python - 使用/Python 附加到 Pandas 数据框时保留 header

python - 在另一个单元格中的plot()之后未渲染AxesSubplot

python - 如何使用列表值对字典进行排序?

python - 应用于矩阵的 fft/fft2 的返回值有什么区别?

python - 尝试将多个函数聚合到新列时出现意外的 KeyError Pandas

python - 在具有共享轴的 seaborn pairplot 中显示 y_ticklabels

python - 重置 pandas 行索引以从 0 以外的数字开始?

python - 推广 ODE 求解器的函数

python - 如何子类化 matplotlib 的图形类?