如何在Python中为numpy矩阵的同值元素边界绘制网格线
基于matplotlib实现numpy数组同值元素边界分隔线绘制
完整实现代码
import numpy as np import matplotlib.pyplot as plt # 定义目标数组 mat = np.array([[0.2, 0.2, 0.1, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1, 0.0], [0.2, 0.2, 0.1, 0.1, 0.0], [0.2, 0.1, 0.1, 0.0, 0.0]]) # 初始化画布 fig, ax = plt.subplots(figsize=(6, 4)) # 绘制数组热图,可自行调整cmap参数修改配色 im = ax.imshow(mat, cmap='viridis', vmin=0, vmax=0.2) n_rows, n_cols = mat.shape # 绘制横向分隔线:相邻行元素值不同的位置画线 for i in range(n_rows - 1): row_diff = np.diff(mat[i:i+2, :], axis=0).flatten() for j in range(n_cols): if not np.isclose(row_diff[j], 0): ax.plot([j - 0.5, j + 0.5], [i + 0.5, i + 0.5], color='white', linewidth=2) # 绘制纵向分隔线:相邻列元素值不同的位置画线 for j in range(n_cols - 1): col_diff = np.diff(mat[:, j:j+2], axis=1).flatten() for i in range(n_rows): if not np.isclose(col_diff[i], 0): ax.plot([j + 0.5, j + 0.5], [i - 0.5, i + 0.5], color='white', linewidth=2) # 隐藏坐标轴刻度,可根据需求调整 ax.set_xticks([]) ax.set_yticks([]) # 添加单元格数值标签,匹配最终效果图需求 for i in range(n_rows): for j in range(n_cols): ax.text(j, i, mat[i, j], ha='center', va='center', color='white', fontsize=12) # 添加颜色图例,可根据需求删除 plt.colorbar(im) plt.show()
参数调整说明
- 分隔线的颜色、粗细可修改
plot方法的color、linewidth参数 - 热图配色可修改
imshow方法的cmap参数,可选值如coolwarm、Greys等 - 数值标签的字体、颜色可修改
text方法的对应参数
内容的提问来源于stack exchange,提问作者Earl Hur
相关产品推荐
相关产品推荐

