簡體   English   中英

使用matplotlib在一張圖中繪制具有不同數據點長度的2個直方圖

[英]Plot 2 histograms with different length of data points in one graph using matplotlib

我有兩組數據,一組包含大約1100萬個數據點,另一組包含大約5000個數據點。我想將它們都繪制在一個直方圖上。 但是由於大小的差異,我需要對頻率進行歸一化,以便可以將它們繪制在同一圖形上。 下面我模擬了我對數據所做的工作,以便能夠繪制它們。 我用過normed = True。

from numpy.random import randn
import matplotlib.pyplot as plt
import random

datalist1=[]
for x in range(1,50000):
  datalist1.append(random.uniform(1,2))

datalist2=randn(5000000)


fig= plt.figure(1)

plt.hist(datalist1,bins=20,color='b',alpha=0.3,label='theoretical',histtype='stepfilled', normed=True)
plt.hist(datalist2,bins=20,alpha=0.5,color='g',label='experimental',histtype='stepfilled',normed=True)
plt.xlabel("Value")
plt.ylabel("Normalised Frequency")
plt.legend()
plt.show()

在此處輸入圖片說明

您能告訴我這是否是解決此問題的好方法嗎? 我想將兩個直方圖頻率之間的最高高度匹配為1(或100%)。

normed=True設置將直方圖歸一化為1的區域 。這使直方圖可以解釋為概率密度函數的估計。

簡而言之,實際上不對峰進行歸一化而是對區域進行歸一化是有意義的。

但是,如果您真的想通過高度進行歸一化,則可以修改直方圖的面數據:

h = plt.hist(datalist1,bins=20,color='b',alpha=0.3,label='theoretical',histtype='stepfilled', normed=True)
p = h[2][0]
p.xy[:,1] /= p.xy[:, 1].max()
h = plt.hist(datalist2,bins=20,alpha=0.5,color='g',label='experimental',histtype='stepfilled',normed=True)
p = h[2][0]
p.xy[:,1] /= p.xy[:, 1].max()

這個解決方案有點讓人討厭,但至少它又快又臟:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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