Я не понимаю гистограммы в матрице рассеяния Pandas.
Я построил матрицу рассеяния набора данных по радужной оболочке.
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')
Похоже на это.
Первая гистограмма не выглядела так, как будто у нее были правильные частоты, поэтому я сам отсортировал столбец.
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)
Фигура соответствует корзинам, которые я сделал. Распределение имеет ту же форму, что и первая гистограмма в матрице рассеяния, но почему гистограмма матрицы рассеяния имеет другие частоты?
Все диаграммы рассеяния будут иметь единицы и деления, основанные на диапазоне двух сравниваемых переменных, тогда как диагональные подграфики представляют собой гистограммы, анализирующие одну переменную. Обратите внимание, что все единицы оси Y соответствуют данным, но гистограммы будут не в единицах cm
, а в частоте.
Таким образом, частоты для гистограммы не показаны, так как я предполагаю, что было бы неясно, где должны появляться эти деления, но я согласен, что это может сбить с толку.
Кроме того, если вы вместо этого нарисуете kde, деления не будут отображаться, но общая форма будет правильной, как и гистограмма.
_ = pd.plotting.scatter_matrix(df, c=y, figsize=[8, 8], s=150, marker='D', diagonal='kde')
Конечно. Единица оси y относится к точечным графикам в той же строке. Он не может показать вам шкалу частот одновременно. Да, именно это меня и смутило. Спасибо, @derek-о