Как я могу пометить xticks в центре бункеров для графика распределения seaborn?

Я хочу построить график распределения, используя seaborn с xticks в средней точке ящиков. Я использую следующий код:

sns.distplot(df['MILEAGE'], kde=False, bins=20)

ht tps://stackru.com/images/ff85b7d7302f8d42b809966885d9e7e2d25083b0.png

2 ответа

Решение

Чтобы получить средние точки столбцов, вы можете извлечь сгенерированные прямоугольные участки и добавить половину их ширины к их положению по оси x. Установка этих средних точек как xticks будет обозначать полосы.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

ax = sns.distplot(np.random.randn(1000).cumsum(), kde=False, bins=20)
mids = [rect.get_x() + rect.get_width() / 2 for rect in ax.patches]
ax.set_xticks(mids)
plt.show()

Если метки в виде галочки будут слишком сильно перекрываться, вы можете повернуть их и / или изменить их размер шрифта:

ax.tick_params(axis='x', rotation=90, labelsize=8)

Если вам нужны края бункера вместо их центров:

edges = [rect.get_x() for rect in ax.patches] + [ax.patches[-1].get_x() + ax.patches[-1].get_width()]

В вашем конкретном случае вы можете просто взять отметки на рисунке и добавить к ним 25, чтобы переместить их в середину столбцов. Вы также можете полностью сбросить их.

ticks = plt.gca().get_xticks()
ticks += 25
plt.xticks(ticks)

В качестве альтернативы, если вы построите гистограмму с помощью matplotlib, вы можете напрямую получить ячейки:

x = np.random.rand(100)

# Matplotlib only
counts, bins, patches = plt.hist(x)
plt.xticks(bins + 25)
Другие вопросы по тегам