【问题标题】:Python Seaborn plotting blank histogramPython Seaborn 绘制空白直方图
【发布时间】:2022-01-25 01:33:43
【问题描述】:

我正在尝试在 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!!!请正式回答,以便我标记为已解决。

标签: python python-3.x matplotlib jupyter-notebook seaborn


【解决方案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 范围)。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2020-10-21
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多