我在使用pyplot.hist函数在同一图上绘制2个直方图时遇到了麻烦。 对于每个分bin区间,我希望两个条形图都居中于bin之间(Python 3.6用户)。 为了说明这一点,这里有一个例子:
import numpy as np
from matplotlib import pyplot as plt
bin_width=1
A=10*np.random.random(100)
B=10*np.random.random(100)
bins=np.arange(0,np.round(max(A.max(),B.max())/bin_width)*bin_width+2*bin_width,bin_width)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(A,bins,color='Orange',alpha=0.8,rwidth=0.4,align='mid',label='A')
ax.hist(B,bins,color='Orange',alpha=0.8,rwidth=0.4,align='mid',label='B')
ax.legend()
ax.set_ylabel('Count')
我理解为:
我得到了这个:
A和B系列重叠在一起,这不太好。我知道'align'只有三个选项(左侧bin居中、两个bin的中间、右侧bin居中),所以我认为除了修改bins之外别无选择,可以添加:
bins-=0.25*bin_width
在绘制 A 并添加之前:
bins+=0.5*bin_width
在绘制B之前,我得到了这个:直方图。这样更好了!但是,我不得不修改分箱方式,所以A和B的分箱不同。我搜索了一种简单的方法来使用相同的分箱,并将第一个和第二个图形移动,使它们在分箱间隔中正确显示,但我没有找到。有什么建议吗?希望我已经清楚地解释了我的问题。
plt.hist
这样的便利包装能够考虑到可能存在的每种异常情况。由于你有一个两步骤的过程,请将其分开处理。使用np.histogram
使用任何设置计算直方图。然后使用plt.bar
使用任何设置绘制结果。 - ImportanceOfBeingErnest