如何在 seaborn distplot 的 bin 中心标记 xticks?

Posted

技术标签:

【中文标题】如何在 seaborn distplot 的 bin 中心标记 xticks?【英文标题】:How can I mark xticks at the center of bins for a seaborn distplot? 【发布时间】:2020-12-10 11:49:30 【问题描述】:

我想使用 seaborn 绘制一个 distplot,xticks 在 bin 的中点。我正在使用以下代码:

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

【问题讨论】:

【参考方案1】:

要获取条形的中点,您可以提取生成的矩形块并将其宽度的一半添加到它们的 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)

如果您需要 bin 边缘而不是它们的中心:

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

【讨论】:

【参考方案2】:

在您的具体情况下,您可以只获取图形的刻度并将 25 添加到它们以将它们移动到条形的中间。您也可以完全重置它们。

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

或者,如果您使用 matplotlib 绘制直方图,则可以直接获取 bin:

x = np.random.rand(100)

# Matplotlib only
counts, bins, patches = plt.hist(x)
plt.xticks(bins + 25)

【讨论】:

以上是关于如何在 seaborn distplot 的 bin 中心标记 xticks?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Seaborn distplot 中绘制 Pandas 日期时间序列?

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)

Seaborn:具有相对频率的 distplot()

无法在 seaborn distplot 中显示图例

Python Seaborn:在 Facetgrid 中绘制多个 distplot

seaborn distplot / displot 具有多个分布