如何将二维数组子区域按(i,j)坐标绘制Colorplot并去除零值区域?
解决方案
要让H[i][j](i,j∈1-3)对应显示在坐标(i,j),同时满足坐标轴范围1-4、去除零值区域的需求,你可以通过调整imshow的坐标映射参数来实现,以下是修正后的代码和说明:
修正代码
import numpy as np import matplotlib.pyplot as plt H = [[0,0,0,0],[0,1,2,3],[0,3,4,3],[0,5,2,3]] # 提取i=1-3、j=1-3的子区域,简化写法 V = np.array(H[1:4])[:, 1:4] # 核心设置:origin='lower'将图像原点放在左下角,extent定义坐标覆盖范围 # extent参数格式:[x最小边界, x最大边界, y最小边界, y最大边界] # 这里设置为[0.5, 3.5, 0.5, 3.5],让每个数组元素的单元格中心对应(1,1)、(1,2)...(3,3) plt.imshow(V, origin='lower', extent=[0.5, 3.5, 0.5, 3.5], cmap='viridis') # 设置坐标轴刻度与H的i、j值一一对应 plt.xticks([1, 2, 3]) plt.yticks([1, 2, 3]) # 将坐标轴范围限制为1-4,符合需求 plt.xlim(1, 4) plt.ylim(1, 4) # 添加垂直颜色条 plt.colorbar(orientation='vertical') plt.show()
关键修改说明
- 子区域提取优化:用
np.array(H[1:4])[:, 1:4]替代原列表推导式,更简洁高效,结果一致。 - 坐标映射调整:
origin='lower':把图像的原点从默认的左上角改为左下角,符合常规坐标系的y轴向上递增逻辑。extent=[0.5, 3.5, 0.5, 3.5]:定义每个单元格的边界,让数组的第(0,0)个元素(对应H[1][1])的单元格中心正好落在坐标(1,1),以此类推,实现H[i][j]与坐标(i,j)的对应。
- 坐标轴配置:
xticks/yticks设置为[1,2,3],直接对应H的i、j索引值。xlim/ylim将坐标轴范围锁定为1-4,满足显示要求。
- 零值区域去除:由于已经提取了H中i、j≥1的子区域,V数组中不存在零值,自然不会出现零值的深色显示。
内容的提问来源于stack exchange,提问作者Dayumona
相关产品推荐
相关产品推荐

