使用Matplotlib在直方图上缩放第二个ax

时间:2014-04-06 18:24:44

标签: python matplotlib histogram

我想在我的直方图上有第二个斧头,其中pourcentage对应于每个bin,就像我使用normed = True一样。我试图使用双胞胎,但规模不正确。

enter image description here

x = np.random.randn(10000)
plt.hist(x)
ax2 = plt.twinx()
plt.show()

如果您可以使用日志缩放x:)

,则可以使用它

1 个答案:

答案 0 :(得分:2)

plt.hist返回每个存储桶中的容器和数据。您可以使用它们来计算直方图下的区域,并使用它可以找到每个条形的标准化高度。 twinx轴可以相应对齐:

xs = np.random.randn(10000)
ax1 = plt.subplot(111)
cnt, bins, patches = ax1.hist(xs)

# area under the istogram
area = np.dot(cnt, np.diff(bins))

ax2 = ax1.twinx()
ax2.grid('off')

# align the twinx axis
ax2.set_yticks(ax1.get_yticks() / area)
lb, ub = ax1.get_ylim()
ax2.set_ylim(lb / area, ub / area)

# display the y-axis in percentage
from matplotlib.ticker import FuncFormatter
frmt = FuncFormatter(lambda x, pos: '{:>4.1f}%'.format(x*100))
ax2.yaxis.set_major_formatter(frmt)

enter image description here