Как я могу пометить 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)