簡體   English   中英

Python - 如何在多個直方圖上獲得相同的最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM