Seaborn的histrogram bin宽度没有延伸到bin标签

时间:2016-11-07 20:03:18

标签: python matplotlib histogram seaborn

这是我上一个问题的另一个问题。 我通过以下代码使用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决定垃圾箱标签/值,这就是我想出来的

enter image description here

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

然后我尝试通过此代码更改要包含的容器数量:

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

但是左边的图表仍然没有看到。 enter image description here

1 个答案:

答案 0 :(得分:9)

因此,您在轴上看到的标签与您的箱子宽度几乎没有关系。实际上,选择轴上的标签使得数据在相应的轴上可见。如果你让seaborn(matplotlib实际上)选择bin大小和数字,会发生类似的事情。如果指定bin编号,则选择bin的宽度,使得整个x-range数据位于bin中。

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

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

哪个会给你:

enter image description here

因此,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

我希望有所帮助!