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

如何绘制不同形状数组交集值的散点图并解决两个显示问题

问题解决思路与修正代码

问题1:网格形状不匹配的解决

你当前代码里meshgrid的参数顺序搞反了:A是5行4列的数组,range(A.shape[0])是行索引(0-4),range(A.shape[1])是列索引(0-3),但meshgrid默认会把第一个参数作为x轴(横向)、第二个作为y轴(纵向),导致生成的网格是4行5列,和A的形状颠倒,出现多余列。

修正方式:调换meshgrid的参数顺序,先传入列索引范围,再传入行索引范围,让网格形状和A完全对齐:

x, y = np.meshgrid(range(A.shape[1]), range(A.shape[0]))

问题2:交集元素标记的实现

  1. 先用np.isin(A, B)生成和A形状一致的布尔掩码,标记出A中属于B的元素位置;
  2. 基于掩码提取对应网格的x、y坐标;
  3. 用scatter绘制填充X标记,设置和原有正方形一致的尺寸s=70,黑色边缘edgecolor='k',填充色设为白色以突出X形状,标记类型选marker='X'。

完整修正代码

import numpy as np
import matplotlib.pyplot as plt

A = np.arange(20).reshape(5, 4)
B = np.array([[5, 6], [12, 13], [16, 17]])
# 修正meshgrid参数顺序,匹配A的5行4列形状
x, y = np.meshgrid(range(A.shape[1]), range(A.shape[0]))

fig, ax = plt.subplots()
# 绘制原有空心正方形标记
ax.scatter(x, y, facecolor='none', edgecolor='k', s=70, marker='s')

# 生成交集元素的掩码
mask = np.isin(A, B)
# 绘制交集元素的填充X标记
ax.scatter(x[mask], y[mask], marker='X', s=70, edgecolor='k', facecolor='w')

# 标注元素数值
for ix, iy, a in zip(x.ravel(), y.ravel(), A.ravel()):
    plt.annotate(a, (ix, iy), textcoords='offset points', xytext=(0,7), ha='center', fontsize=14)

plt.axis("off")
ax.invert_yaxis()

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:41:13