二维直方图:获取完整 nbins x nbins 的结果
2d histogram: Get result of full nbins x nbins
我正在使用 matplotlib 的 hist2d 函数制作我拥有的数据的二维直方图,但是我无法解释结果。
这是我的情节:
这是使用以下行创建的:
hist = plt.hist2d(X, Y, (160,160), norm=mpl.colors.LogNorm(vmin=1, vmax=20))
这个 returns 一个二维数组 (160, 160),以及 bin 边缘等
在图中,有具有高频值的箱(黄色箱)。我希望能够获得此直方图的结果并过滤掉具有低值的箱子,保留高箱子。但我希望有 160*160 个值,但我只能找到 160 个 X 和 160 个 Y 值。
我想做的基本上是从密度较低的数据中过滤出密度较高的数据。如果这意味着将数据表示为单个值(一个 bin),那么就可以了。
我是不是误解了函数,还是没有正确访问数据结果?我也尝试过 spicy,但结果似乎是相同或相似的格式。
您需要 Seaborn 包。
你提到了
I would like to be able to get the results of this histogram and filter out the bins that have low values, preserving the high bins.
您应该绝对使用其中之一:
seaborn.joinplot(...,kind='hex')
:它显示落在六边形箱内的观测值的计数。此图最适用于相对较大的数据集。
seaborn.joinplot(...,kind='kde')
:使用核密度估计来可视化双变量分布。我推荐它更好。
示例'kde'
使用级别数 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')
不确定这是否是您想要的。
The hist2d docs 指定函数 returns 大小为 4 的元组,其中第一项 h
是热图。
此 h
将具有与 bins
相同的形状。
您可以捕获输出(它仍会绘制),并使用 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))))
我正在使用 matplotlib 的 hist2d 函数制作我拥有的数据的二维直方图,但是我无法解释结果。
这是我的情节:
这是使用以下行创建的:
hist = plt.hist2d(X, Y, (160,160), norm=mpl.colors.LogNorm(vmin=1, vmax=20))
这个 returns 一个二维数组 (160, 160),以及 bin 边缘等
在图中,有具有高频值的箱(黄色箱)。我希望能够获得此直方图的结果并过滤掉具有低值的箱子,保留高箱子。但我希望有 160*160 个值,但我只能找到 160 个 X 和 160 个 Y 值。
我想做的基本上是从密度较低的数据中过滤出密度较高的数据。如果这意味着将数据表示为单个值(一个 bin),那么就可以了。
我是不是误解了函数,还是没有正确访问数据结果?我也尝试过 spicy,但结果似乎是相同或相似的格式。
您需要 Seaborn 包。
你提到了
I would like to be able to get the results of this histogram and filter out the bins that have low values, preserving the high bins.
您应该绝对使用其中之一:
seaborn.joinplot(...,kind='hex')
:它显示落在六边形箱内的观测值的计数。此图最适用于相对较大的数据集。seaborn.joinplot(...,kind='kde')
:使用核密度估计来可视化双变量分布。我推荐它更好。
示例'kde'
使用级别数 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')
不确定这是否是您想要的。
The hist2d docs 指定函数 returns 大小为 4 的元组,其中第一项 h
是热图。
此 h
将具有与 bins
相同的形状。
您可以捕获输出(它仍会绘制),并使用 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))))