簡體   English   中英

2d 直方圖:獲取完整 nbins x nbins 的結果

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

你提到

我希望能夠獲得此直方圖的結果並過濾掉具有低值的箱,保留高箱

絕對應該使用其中之一:

  1. seaborn.joinplot(...,kind='hex') :它顯示了落在六邊形箱內的觀察計數。 這個 plot 最適用於相對較大的數據集。
  2. seaborn.joinplot(...,kind='kde') :使用 kernel 密度估計來可視化二元分布。 我推薦它更好。

例子'kde'

使用層數n_levelsshade_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.

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