[英]2d histogram: Get result of full nbins x nbins
我正在使用 matplotlib 的 hist2d function 來制作我擁有的數據的二維直方圖,但是我無法解釋結果。
這是我擁有的 plot:
這是使用以下行創建的:
hist = plt.hist2d(X, Y, (160,160), norm=mpl.colors.LogNorm(vmin=1, vmax=20))
這將返回 (160, 160) 的二維數組,以及 bin 邊緣等。
在 plot 中,存在具有高頻率值的 bin(黃色 bin)。 我希望能夠獲得此直方圖的結果並過濾掉具有低值的 bin,保留高 bin。 但我希望會有 160*160 的值,但我只能找到 160 X 和 160 Y 的值。
我想做的基本上是從密度較小的數據中過濾掉密度較大的數據。 如果這意味着將數據表示為單個值(bin),那沒關系。
我是誤解了 function 還是我沒有正確訪問數據結果? 我也嘗試過辣味,但結果似乎是相同或相似的格式。
您需要Seaborn package。
你提到
我希望能夠獲得此直方圖的結果並過濾掉具有低值的箱,保留高箱。
您絕對應該使用其中之一:
seaborn.joinplot(...,kind='hex')
:它顯示了落在六邊形箱內的觀察計數。 這個 plot 最適用於相對較大的數據集。seaborn.joinplot(...,kind='kde')
:使用 kernel 密度估計來可視化二元分布。 我推薦它更好。 使用層數n_levels
和shade_lowest=False
忽略低值。
import seaborn as sns
import numpy as np
import matplotlib.pylab as plt
x, y = np.random.randn(2, 300)
plt.figure(figsize=(6,5))
sns.kdeplot(x, y, zorder=0, n_levels=6, shade=True, cbar=True,
shade_lowest=False, cmap='viridis')
不確定這是否是您想要的。
hist2d 文檔指定 function 返回一個大小為 4 的元組,其中第一項h
是熱圖。
這個h
將具有與bins
相同的形狀。
您可以捕獲 output (它仍會繪圖),並使用argwhere
查找值超過的坐標,例如,第 90 個百分位數:
h, xedges, yedges, img = hist = plt.hist2d(X, Y, bins=(160,160), norm=mpl.colors.LogNorm(vmin=1, vmax=20))
print(list(np.argwhere(h > np.percentile(h, 90))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.