如何获取Hexbin图中计数最高(最热)区域的x、y坐标值
提取matplotlib hexbin图最高热度区域坐标的实现方法
不需要手动从生成的图像上肉眼读坐标再输入,matplotlib.axes.Axes.hexbin的返回值本身就存储了所有六边形的热度和对应坐标,直接取值即可。
- 核心属性说明
调用hexbin()方法会返回一个PolyCollection对象,和坐标提取相关的属性有两个:get_array():返回长度为N的数组,对应N个六边形各自包含的点数量,也就是图上显示的热度值,数值越大区域热度越高get_offsets():返回形状为(N,2)的数组,每一行对应一个六边形中心的(x,y)坐标,和get_array()返回的热度值顺序完全一一对应
不需要额外做图像识别、像素解析操作,直接从这两个属性里计算就能拿到目标坐标,精度远高于人眼读数
- 可直接复用的代码
只需要修改你原有绘图逻辑,接住hexbin的返回值,加几行计算代码即可:import matplotlib.pyplot as plt import numpy as np # --- 以下为你原有的绘图逻辑,替换成自己的数据源即可 --- # x, y = 你用于生成hexbin图的原始坐标数组 fig, ax = plt.subplots() # 重点:接住hexbin的返回值,原有绘图参数(gridsize、cmap等)和你之前的设置保持完全一致 hb = ax.hexbin(x, y, gridsize=50, cmap='viridis') # --- 原有绘图逻辑结束 --- # 提取所有六边形的热度值、中心坐标 heat_counts = hb.get_array() hex_centers = hb.get_offsets() # 定位热度最高的六边形索引,取出对应坐标 max_heat_pos = np.argmax(heat_counts) target_x, target_y = hex_centers[max_heat_pos] print(f"最高热度区域中心坐标:x = {target_x:.3f}, y = {target_y:.3f}") # 提取到的target_x、target_y可以直接传入后续对称线检测逻辑,无需手动输入 plt.show() - 精度调整方法
如果运行后得到的结果和你目测的x≈153.0、y≈1.535存在小幅偏差,只需要调整hexbin()调用时的gridsize参数:gridsize数值越大,单个六边形的尺寸越小,坐标定位精度越高,调整到误差符合项目要求即可。
如果图中存在多个高热度区域需要提取,可以设置热度阈值(比如取热度大于全局最大值90%的所有六边形),再对筛选出的坐标做均值或聚类计算,就能得到所有目标区域的坐标。
内容的提问来源于stack exchange,提问作者Justina Ambers
相关产品推荐
相关产品推荐

