Python Seaborn 绘制空白直方图

Posted

技术标签:

【中文标题】Python Seaborn 绘制空白直方图【英文标题】:Python Seaborn plotting blank histogram 【发布时间】:2021-05-28 00:33:26 【问题描述】:

我正在尝试在 python 中使用 seaborn 绘制直方图。但它给我的只是一个空白的数字。

这是我专栏的describe()

代码:

plt.subplots(figsize=(7,7))
sns.histplot(data=contratos, x='duracao_contrato', bins='fd')

输出:

【问题讨论】:

bin 估计失败了吗?可能发生在某些估算器-数据组合中。如果定义 bins=10 会发生什么? 是的,我认为这是问题所在。我没有收到任何警告信息有点奇怪。删除负值并设置 bin 编号后,它起作用了! 负数应该不是问题。另一个 bin 估计器可能与您的数据集完美配合。请see here for the relevant bin keywords - seaborn 将此传递给 numpy。并且某些数据集不满足某些估计器的隐含先决条件。然而,他们默默地失败是indeed annoying。 在此处发布之前,我尝试使用 fd,但花了一些时间,然后也显示了这个空白直方图。其他的(sturges、scott、doane)创建了太大的 bin(由于数据范围很广),并且只在 bin 0 上给出了一个大条。我猜 bin 方法可能定义了太大的 bin。手动设置后,它看起来更好。非常感谢@Mr.T!!!请正式回答,以便我标记为已解决。 【参考方案1】:

在您的情况下,自动 bin 估计似乎失败了。某些估算器-数据组合可能会发生这种情况(请参阅此处的another example)。

一般来说,像 fd 这样的估计器应该与 seaborn 一起使用 - seaborn 将 bin keyword 传递给 numpy,因为直方图数据的计算是由 numpy 执行的。不幸的是,如果估算器在他们的 bin 计算中失败,它们会默默地失败,因此通常不清楚为什么不绘制图表。

那么,在这种情况下可以做些什么呢?首先,可以尝试使用bins=auto - 一种通用的估计器,可以选择可用估计器功能中的“最佳”。如果这不令人满意,请尝试其他估算器,例如 bins="doane"bins="stone"(看起来,您已经这样做了)。如果这仍然不能令人满意,请定义数字 bins=10(均匀间隔的 bin)或范围 bins=[-5000, 300, 350, 370, 400, 8000](不均匀间隔的 bin)。 顺便说一句,在 bin 列表中使用 inf 可以创建另一个静默错误 bins=[-np.inf, 300, 350, 370, 400, np.inf] 也可能会创建一个空图(我假设是因为 bin 用于确定图的 x 范围)。

【讨论】:

以上是关于Python Seaborn 绘制空白直方图的主要内容,如果未能解决你的问题,请参考以下文章

python 示例显示如何使用累积比绘制直方图。使用seaborn.FacetGrid()绘制多个直方图。

使用 seaborn 绘制多个直方图

如何绘制从不同列着色的堆叠 seaborn 直方图

使用 seaborn 为数据框绘制直方图

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

seaborn可视化displot绘制直方图(histogram)并通过axvline函数在直方图中添加均值(mean)竖线(自定义均值竖线色彩)