You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Python matplotlib网格中包含x,y坐标点的网格数量及占比

实现方案

核心逻辑

你提到的示例总网格数48对应x轴[-960,960]划分为8段、y轴[-540,540]划分为6段的配置,我们先显式定义网格划分参数,避免matplotlib自动调整刻度导致的网格计数偏差,再通过坐标映射找到散点所属的网格,最后填充并统计即可。

完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# -------------------------- 配置参数 --------------------------
# 坐标范围
X_MIN, X_MAX = -960, 960
Y_MIN, Y_MAX = -540, 540
# 网格划分数量(对应示例48总网格:8*6=48,可按需修改)
X_GRID_NUM = 8
Y_GRID_NUM = 6
# 计算每个网格的宽高
grid_width = (X_MAX - X_MIN) / X_GRID_NUM
grid_height = (Y_MAX - Y_MIN) / Y_GRID_NUM
# 散点数量
POINT_NUM = 15
# 底图路径,替换为你自己的本地路径
scene_folder = "your_image_path.png"

# -------------------------- 生成随机点+识别含点网格 --------------------------
# 固定随机种子可复现结果,不需要可以删除下一行
np.random.seed(42)
x = np.random.randint(X_MIN, X_MAX, POINT_NUM)
y = np.random.randint(Y_MIN, Y_MAX, POINT_NUM)

# 计算每个点所属的网格索引,去重得到所有含点的网格
grid_set = set()
for px, py in zip(x, y):
    # 计算x方向网格索引(从左到右0到X_GRID_NUM-1)
    x_idx = int((px - X_MIN) // grid_width)
    # 边界处理:刚好落在X_MAX的点归到最后一个网格
    x_idx = min(x_idx, X_GRID_NUM - 1)
    # 计算y方向网格索引(从下到上0到Y_GRID_NUM-1)
    y_idx = int((py - Y_MIN) // grid_height)
    y_idx = min(y_idx, Y_GRID_NUM - 1)
    grid_set.add((x_idx, y_idx))

# -------------------------- 绘图 --------------------------
fig, ax = plt.subplots(figsize=(20, 11))
# 先画底图
img = plt.imread(scene_folder)
ax.imshow(img, extent = [X_MIN, X_MAX, Y_MIN, Y_MAX], aspect='auto')

# 填充所有含点的网格为白色,透明度可按需调整
for (x_idx, y_idx) in grid_set:
    # 计算网格左下角坐标
    grid_x0 = X_MIN + x_idx * grid_width
    grid_y0 = Y_MIN + y_idx * grid_height
    # 添加白色矩形
    ax.add_patch(Rectangle((grid_x0, grid_y0), grid_width, grid_height, color='white', alpha=0.7))

# 画网格、散点
ax.grid(color='white', linestyle='--', linewidth=1)
# zorder参数保证散点在最上层,不会被白色填充盖住
ax.scatter(x, y, marker='o', color='red', alpha=0.8, zorder=10)

# 显式设置刻度,保证网格和我们定义的划分完全一致
ax.set_xticks(np.arange(X_MIN, X_MAX+1, grid_width))
ax.set_yticks(np.arange(Y_MIN, Y_MAX+1, grid_height))

plt.show()
plt.close()

# -------------------------- 统计计算 --------------------------
total_grid = X_GRID_NUM * Y_GRID_NUM
has_point_grid = len(grid_set)
ratio = has_point_grid / total_grid * 100
print(f"总网格数:{total_grid}")
print(f"含散点的网格数:{has_point_grid}")
print(f"占比:{ratio:.1f}%")

补充说明

  • 如果需要调整网格划分数量,直接修改X_GRID_NUM和Y_GRID_NUM即可,代码会自动适配
  • 白色填充的透明度可以修改Rectangle的alpha参数调整,0为完全透明,1为完全不透明

内容的提问来源于stack exchange,提问作者Phoenix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:36:03