为了账号安全,请及时绑定邮箱和手机立即绑定

二维直方图:获取完整 nbins x nbins 的结果

二维直方图:获取完整 nbins x nbins 的结果

摇曳的蔷薇 2022-12-20 11:17:46
我正在使用 matplotlib 的 hist2d 函数制作我拥有的数据的二维直方图,但是我无法解释结果。这是我的情节:这是使用以下行创建的:hist = plt.hist2d(X, Y, (160,160), norm=mpl.colors.LogNorm(vmin=1, vmax=20))这将返回 (160, 160) 的二维数组,以及 bin 边缘等。在图中,有具有高频值的箱(黄色箱)。我希望能够获得此直方图的结果并过滤掉具有低值的箱子,保留高箱子。但我希望有 160*160 个值,但我只能找到 160 个 X 和 160 个 Y 值。我想做的基本上是从密度较低的数据中过滤出密度较高的数据。如果这意味着将数据表示为单个值(一个 bin),那么就可以了。我是不是误解了函数,还是没有正确访问数据结果?我也尝试过 spicy,但结果似乎是相同或相似的格式。
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

不确定这是否是您想要的。


hist2d 文档指定该函数返回一个大小为 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))))


查看完整回答
反对 回复 2022-12-20
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

你需要Seaborn包。

你提到

我希望能够获得此直方图的结果并过滤掉具有低值的箱子,保留高箱子

绝对应该使用其中之一:

  1. seaborn.joinplot(...,kind='hex'):它显示落在六边形箱内的观测值的计数。该图最适合相对较大的数据集。

  2. seaborn.joinplot(...,kind='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')

//img1.sycdn.imooc.com//63a129ea00018ac403650249.jpg

查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号