如何将0-1二维矩阵绘制为仅值为1处显示黑点的散点图
0-1二维矩阵转离散黑色散点的实现方案
你之前使用plt.pcolormesh的方式是生成网格伪彩图,无法实现仅在值为1的位置显示离散黑点的需求,直接提取所有值为1的元素坐标后调用scatter绘制即可,运行效率高,也适配后续叠加等高线的需求,完整实现代码如下:
import numpy as np import matplotlib.pyplot as plt # 替换为你实际的275×357大小的0-1矩阵即可 array = np.array(([0,0,0,0,0,0,1,1,0,0,0,1,1,1], [0,1,0,0,0,1,0,0,0,0,0,1,0,1])) # 提取所有值为1的元素的坐标:y为行索引对应y轴,x为列索引对应x轴 y, x = np.where(array == 1) # 初始化绘图对象,后续等高线也在该ax对象上绘制即可自动叠加 fig, ax = plt.subplots() # 绘制黑色散点:s参数调整点大小,marker='.'对应小圆点 ax.scatter(x, y, c='black', s=10, marker='.') # 可选:反转y轴让矩阵第一行显示在图的上方,符合常规矩阵阅读习惯 ax.invert_yaxis() # 此处插入你的等高线绘制代码,示例:ax.contour(等高线X网格, 等高线Y网格, 等高线数值矩阵) plt.show()
适配叠加等高线的注意事项
- 坐标匹配:如果你的等高线图的坐标范围和矩阵行列下标不一致,对x、y做线性缩放即可,比如等高线x轴范围是0~20,矩阵列数为357,可通过
x = x / array.shape[1] * 20实现坐标映射,y轴同理。 - 显示效果调整:可调整
s参数修改点的大小,避免点过密重叠或过疏看不清;如果不需要显示坐标轴刻度边框,可添加ax.axis('off')隐藏。 - 层级控制:散点默认绘制在等高线上层,如果你需要调整层级,可给
scatter方法添加zorder参数,数值越大层级越高。
内容的提问来源于stack exchange,提问作者wabash
相关产品推荐
相关产品推荐

