2014-05-12 34 views
14

我花了一些时间搜索interwebs这个答案,我也尝试过寻找所有的答案,但我认为我没有正确的术语...请原谅,如果这是一些已知问题的副本,我会高兴地删除我的帖子,并引用该帖子!Matplotlib:如何使两个直方图具有相同的bin宽度?

在任何情况下,我想绘制Matplotlib中相同图上的两个直方图。我的两个数据源是500个元素的列表。为了提供我所面临的问题的说明,请参见下面的图片:

Uneven histograms

正如你可以看到,直方图具有默认参数下不均匀块大小,即使仓的数量是一样的。我想保证这两个直方图的bin宽度是相同的。有什么办法可以做到这一点?

在此先感谢!

回答

13

我认为一种可以轻松适用于大多数情况而不必担心每个数据集的分布范围的一致方法是将数据集放在一个大的数据集中,确定数据集的边缘和然后剧情:

a=np.random.random(100)*0.5 #a uniform distribution 
b=1-np.random.normal(size=100)*0.1 #a normal distribution 
bins=np.histogram(np.hstack((a,b)), bins=40)[1] #get the bin edges 
plt.hist(a, bins) 
plt.hist(b, bins) 

enter image description here

+0

Upvoted这两个答案,但这一个明确提供了如何做到数据驱动方式的最明确的指示。谢谢! – ericmjl

7

我想你可以使用range参数和bin参数一起为两个数据集提供相同的bin大小。

plt.hist(x, bins=n, range=(a,b)) 

:如果你保持(b-a)/n相同的比例,你应该结束了相同的块大小。

+1

这个工作对我来说是一个公认的没有。 – jimh

3

您应该使用的hist的返回值。

foo = np.random.normal(loc=1, size=100) # a normal distribution 
bar = np.random.normal(loc=-1, size=10000) # a normal distribution 
n, bins, patches = plt.hist(foo, bins=50, range=[-6, 6], normed=True) 
n, bins, patches = plt.hist(bar, bins=bins, alpha=0.5, normed=True) 

enter image description here

相关问题