如何绘制不同形状数组交集值的散点图并解决两个显示问题
问题解决思路与修正代码
问题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:交集元素标记的实现
- 先用
np.isin(A, B)生成和A形状一致的布尔掩码,标记出A中属于B的元素位置; - 基于掩码提取对应网格的
x、y坐标; - 用
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
相关产品推荐
相关产品推荐

