[英]Python - How to have same maximum on multiple histograms
比方说,我有两种不同的分布
a=N.random.normal(0,0.5,500)
b=N.random.normal(1,3.,500)
我想制作一个直方图,其中最大值处于同一水平。
如果我使用density = True参数制作标准化的直方图,它将使两个直方图的区域都为1,它不会改变最大值不同的事实。
P.hist(a, histtype='step', lw=2, cumulative=True)
P.hist(b, histtype='step', color='r', lw=2, density=True)
我想要的是制作一个直方图,用最大值“标准化”。 我的意思是当蓝色和红色直方图的最大值相同时,可以很容易地比较它们。 非常感谢您的帮助。
下面的代码将给出a
相同的最高为b
:
a *= b.max()/a.max()
虽然a中的累积标志可能会破坏它,但应该在生成直方图之前放置它。
我不确定我会这样做,但如果你想我认为最好的方法是添加两个轴(也是为了让你可以看到它们的高度)。 例如,请参阅此处: https : //matplotlib.org/gallery/api/two_scales.html
import numpy as np
from matplotlib import pyplot as plt
fig, ax1 = plt.subplots()
ax1.hist(a, histtype='step', color='b', lw=2, density=True)
ax1.tick_params(axis='y', labelcolor='b')
ax2 = ax1.twinx()
ax2.hist(b, histtype='step', color='r', lw=2, density=True)
ax2.tick_params(axis='y', labelcolor='r')
这给出了以下输出(我认为,这看起来比你获得的更糟;我还在第一个图中将cumulative = True更改为密度= True以与您提供的图一致):
此外,严格来说,这并不能确保最大值真的相同。 如果你想这样做,你可以通过例如强制它
import numpy as np
from matplotlib import pyplot as plt
fig, ax1 = plt.subplots()
n1, _, _ = ax1.hist(a, histtype='step', color='b', lw=2, density=True)
ax1.tick_params(axis='y', labelcolor='b')
ax2 = ax1.twinx()
n2, _, _ = ax2.hist(b, histtype='step', color='r', lw=2, density=True)
ax2.tick_params(axis='y', labelcolor='r')
ax1.set_ylim([0, n1.max()*1.1])
ax2.set_ylim([0, n2.max()*1.1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.