Moo*_*dra 4 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()
Run Code Online (Sandbox Code Playgroud)
我让seaborn决定垃圾箱标签/值,这就是我想出的
我注意到条形本身并没有一直延伸到标签.所以0-10标签中的第一个条似乎延伸到大约8,而不是完全延伸到10.做一个快速value_count(除非我弄错了),表明第一个条实际上只包括出现到8岁.
然后,我尝试通过此代码更改要包含的容器数量:
g.map(plt.hist, 'age', bins =8, color = 'r'), plt.show()
Run Code Online (Sandbox Code Playgroud)
因此,您在轴上看到的标签与您的箱子的宽度几乎没有关系.实际上,选择轴上的标签使得数据在相应的轴上可见.如果你让seaborn(matplotlib实际上)选择bin大小和数字,会发生类似的事情.如果指定bin编号,则选择bin的宽度,使得整个x-range数据位于bin中.
如果要控制箱的宽度,则需要传递列表而不仅仅是bin参数的数字.假设您想要从0到100的10个箱子,您可能会写:
g.map(plt.hist, 'age', bins=range(0, 110, 10)], color = 'r')
Run Code Online (Sandbox Code Playgroud)
哪个会给你:
所以,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')
Run Code Online (Sandbox Code Playgroud)
注意:np.arange当我们使用浮动时需要.如果您的数据只是整数,那么您也可以使用range它.
现在你可能也想调整xticks它们,以便它们也显示bin启动.Pyplot有一个方便的命令:
plt.xticks(range(0, 110, 10))
Run Code Online (Sandbox Code Playgroud)
或者对于后一个例子:
plt.xticks(np.around(my_bins, decimals=1))
Run Code Online (Sandbox Code Playgroud)
将np.around可能需要为您的数据可能在花车将很难看,在x轴刻度标签开始.还要注意,plt.xticks可以做更多方便的事情,所以你应该去找一个loock.
我希望有所帮助!