我很乐意为您提供以下帮助。
我想在一个共同的直方图上绘制两个数据集,使得两个直方图都不被截断,并且概率分布范围从0到1。
让我解释一下我的意思。到目前为止,我可以很好地在一个直方图上绘制两个数据集,并通过在ax.hist()
中写入normed = 1
来强制两个分布的积分为1,如下图所示:
这是通过类似以下代码生成的:
x1, w1, patches1 = ax.hist(thing1, bins=300, edgecolor='b', color='b', histtype='stepfilled', alpha=0.2, normed = 1)
x2, w2, patches2 = ax.hist(thing2, bins=300, edgecolor='g', color='g', histtype='stepfilled', alpha=0.2, normed = 1)
通常情况下,一个概率分布远高于另一个,这使得难以清晰地阅读图形。
因此,我尝试将它们归一化,使它们在y轴上的范围都从0到1,并仍然保持其形状。例如,我尝试使用以下代码:
for item in patches1:
item.set_height(item.get_height()/sum(x1))
这段文字是从这里的讨论中提取的(如何在Python中对直方图进行归一化?),但是Python会报错,说没有get_height
这样的质量。
我的问题很简单:我该如何使y轴范围从0到1,并保留两个分布的形状?
twinx()
并保留未缩放的直方图会更直观。 - Thomas Kühn