簡體   English   中英

如何標准化 python 中的二維直方圖?

[英]How to normalize a 2d histogram in python?

我正在嘗試 plot 二維直方圖。 直方圖基本上是一個星系,我有每個發光點的點。 我已經繪制了直方圖,但它沒有正確標准化,因為顏色條的值應該是 go 從 0 到 1。我該如何解決這個問題?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import kde

fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(20, 8))

data1 = pd.read_csv('mydata.txt', sep='\s+', header=None)

az1 = data1[0]
el1 = data1[1]

nbins = 250
hist1 = axes[0].hist2d(az1, el1, bins=nbins, cmap='magma', density=True)
 
fig.colorbar(hist1[3], ax = axes)

我嘗試使用 function hist2D ,但我沒有找到用它標准化結果的方法。 所以我建議使用numpy模塊中的直方圖: np.nistogram2d ,您可以在其中提取結果,然后在顯示之前對 output 進行歸一化。 這里有一個隨機數的例子:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import kde

fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(20, 8))

# data1 = pd.read_csv('mydata.txt', sep='\s+', header=None)
N=10000
az1 = np.random.random(N)
el1 = np.random.random(N)

nbins = 250
hist1 = axes[0].hist2d(az1, el1, bins=nbins, cmap='magma', density=True)
fig.colorbar(hist1[3], ax = axes)


H, xedges, yedges = np.histogram2d(el1, az1, bins=(nbins, nbins),density=True )
# H_normalized = H/float(az1.shape[0]) # the integral over the histogrm is 1
H_normalized = H/H.max((0,1)) # the max value of the histogrm is 1
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

im = axes[1].imshow(H_normalized, extent=extent, cmap='magma', interpolation='none',origin ='lower')
fig.colorbar(im, ax=axes[1])
plt.show()

暫無
暫無

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

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