Эти функции построения графиков pyplot.hist
, seaborn.countplot
и seaborn.displot
являются вспомогательными инструментами для построения графика частоты одной переменной. В зависимости от характера этой переменной они могут быть более или менее подходящими для визуализации.
Непрерывная переменная
Непрерывная переменная x
может быть гистограммирована, чтобы показать распределение частот.
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)*100
hist, edges = np.histogram(x, bins=np.arange(0,101,10))
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))
plt.show()
То же самое может быть достигнуто с помощью pyplot.hist
или seaborn.distplot
,
plt.hist(x, bins=np.arange(0,101,10), ec="k")
или
sns.distplot(x, bins=np.arange(0,101,10), kde=False, hist_kws=dict(ec="k"))
distplot
упаковывает pyplot.hist
, но имеет некоторые другие функции, которые позволяют, например, показать оценку плотности ядра.
Дискретная переменная
Для дискретной переменной гистограмма может подходить или не подходить. Если вы используете numpy.histogram
, ячейки должны быть точно между ожидаемыми дискретными наблюдениями.
x1 = np.random.randint(1,11,100)
hist, edges = np.histogram(x1, bins=np.arange(1,12)-0.5)
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))
plt.xticks(np.arange(1,11))
Вместо этого можно также считать уникальные элементы в x
,
u, counts = np.unique(x1, return_counts=True)
plt.bar(u, counts, align="center", ec="k", width=1)
plt.xticks(u)
в результате получается тот же график, что и выше. Основное отличие состоит в том, что не все возможные наблюдения заняты. Скажем, 5
даже не является частью ваших данных. Гистограммный подход все еще показывает это, хотя он не является частью уникальных элементов.
x2 = np.random.choice([1,2,3,4,6,7,8,9,10], size=100)
plt.subplot(1,2,1)
plt.title("histogram")
hist, edges = np.histogram(x2, bins=np.arange(1,12)-0.5)
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))
plt.xticks(np.arange(1,11))
plt.subplot(1,2,2)
plt.title("counts")
u, counts = np.unique(x2, return_counts=True)
plt.bar(u.astype(str), counts, align="center", ec="k", width=1)
Последнее - то, что делает seaborn.countplot
.
sns.countplot(x2, color="C0")
Следовательно, он подходит для дискретных или категориальных переменных.
Резюме
Все функции pyplot.hist
, seaborn.countplot
и seaborn.displot
действуют как обертки для гистограммы matplotlib и могут использоваться, если создание такой гистограммы вручную считается слишком громоздким.
Для непрерывных переменных можно использовать pyplot.hist
или seaborn.distplot
. Для дискретных переменных seaborn.countplot
более удобно.