这是我上一个问题的另一个问题。 我通过以下代码使用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()
答案 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')
哪个会给你:
因此,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。
我希望有所帮助!