【问题标题】:Seaborn's histrogram bin widths not extending to bin labelsSeaborn 直方图 bin 宽度未扩展到 bin 标签
【发布时间】:2017-03-21 07:06:42
【问题描述】:

这与我上一个问题不同。 我正在通过以下代码使用 facetgrid 打印直方图。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

titanic = sns.load_dataset("titanic")
g= sns.FacetGrid(titanic, col ='survived', size = 3, aspect = 2)
g.map(plt.hist, 'age', color = 'r'), plt.show()
plt.show()

我让 seaborn 决定垃圾箱标签/值,这就是我想出的

我注意到条形本身并没有一直延伸到标签。 因此,0-10 标签中的第一个条似乎延伸到大约 8,而不是完全延伸到 10。做一个快速的 value_count(除非我弄错了),表明第一个条确实只包括直到 8 岁的事件.

然后我尝试通过此代码更改要包含的垃圾箱数量:

g.map(plt.hist, 'age', bins =8, color = 'r'), plt.show()

但左边的图表仍然看起来不正常。

【问题讨论】:

    标签: python matplotlib histogram seaborn


    【解决方案1】:

    因此,您在轴上看到的标签确实与您的垃圾箱的宽度几乎没有关系。实际上,选择轴上的标签是为了使数据在相应的轴上可见。如果让 seaborn(实际上是 matplotlib)选择 bin 大小和数量,也会发生类似的事情。如果您指定 bin 编号,则选择 bin 的宽度,使整个 x 范围的数据位于 bin 内。

    如果您想控制 bin 的宽度,您需要为 bin 参数传递一个列表,而不仅仅是一个数字。假设你想要从 0 到 100 的 10 个 bin,你可能会写:

    g.map(plt.hist, 'age', bins=range(0, 110, 10)], color = 'r')
    

    这会给你:

    所以,bins 看起来像 [0, 10, ..., 100]

    您可能不希望如此硬编码,并希望有一些更灵活的方式来指定垃圾箱。一种选择是定义一个 bin 宽度,并从数据的开头到结尾都有 bin。这可能如下所示:

    b_width = 10  # chose an arbitrary value here
    my_bins = np.arange(min(titanic['age']), max(titanic['age']) + b_width, b_width)
    g.map(plt.hist, 'age', bins=my_bins, color = 'r')
    

    注意:np.arange 是必需的,因为我们正在使用浮点数。如果您的数据只是整数,您也可以使用range

    现在您可能还想调整 xticks 以便它们也显示 bin 开始。 Pyplot 有方便的命令:

    plt.xticks(range(0, 110, 10))
    

    或者对于后一个例子:

    plt.xticks(np.around(my_bins, decimals=1))
    

    可能需要np.around,因为您的数据可能从浮动开始,在 x 轴刻度标签上看起来很难看。 还要注意plt.xticks可以做更多方便的事情,所以你应该去have a loock

    希望对你有所帮助!

    【讨论】:

    • 嗨 Jojo,在这行代码中添加 + b_width 的原因是什么。 np.arange(min(titanic['age']), max(titanic['age']) + b_width。谢谢。
    • 还有一个问题,如何在运行代码g.map(plt.hist, 'age', bins=range(0, 110, 10)], color = 'r') 后手动标记 x 轴。我希望它(标签)以 10 为增量增加。谢谢!
    • 嗨@moondra 这是因为没有使用rangenp.arange 的上限。如果您不添加它,那么上面的示例中将缺少100
    • @moondra 如何修改标签基本上是一个已经有answers 的不同问题,但我会更新我的答案以包含它。如果它帮助您考虑接受它作为正确答案。
    • 非常感谢。会的。
    猜你喜欢
    • 2018-04-09
    • 2016-12-30
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2015-03-22
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多