如何在matplotlib热图各区块间添加白色分隔线且不改变缩放比例
解决方案
不需要调整原有热图的颜色范围、数值缩放逻辑,只要在现有代码基础上添加对齐到单元格边界的白色网格线,就能实现区块间白色分隔的效果,原有配色和数值映射关系完全不变。
修改后的完整可运行代码如下:
import matplotlib.pyplot as plt import numpy as np def heatmap2d(arr: np.ndarray): arr = np.array(arr) n_rows, n_cols = arr.shape plt.imshow(arr, cmap='jet', interpolation="none", vmin=140, vmax=395) # 添加单元格白色分隔线 plt.gca().set_xticks(np.arange(n_cols + 1) - 0.5) plt.gca().set_yticks(np.arange(n_rows + 1) - 0.5) plt.gca().grid(which='major', color='white', linewidth=2) # 隐藏分隔线位置的多余刻度标记 plt.gca().tick_params(top=False, bottom=False, left=False, right=False, labelbottom=False, labelleft=False) plt.colorbar() plt.show() test_array = [ [220, 152, 146, 151, 146, 144], [142, 156, 290, 174, 152, 151], [148, 190, 390, 370, 146, 152], [143, 142, 380, 375, 146, 152], [154, 146, 154, 172, 150, 152], [150, 152, 144, 140, 142, 0] ] heatmap2d(test_array)
关键说明
- 原有
vmin=140、vmax=395、cmap='jet'、interpolation="none"配置全部保留,数值和颜色的映射比例和修改前完全一致 - 分隔线通过网格实现,刻度位置偏移0.5是为了让网格线刚好对齐每个热图区块的边缘,不会切到区块内部的颜色展示
- 可以通过修改
linewidth参数调整白色分隔线的粗细,适配不同的画布尺寸
内容的提问来源于stack exchange,提问作者Jaspreet Singh
相关产品推荐
相关产品推荐

