Matplotlib中如何为pcolormesh指定单元格添加填充图案?
为特定数值的单元格添加填充图案(Hatch)的实现方法
原代码通过pcolormesh绘制了对应0-4数值的颜色网格,要给值为0和1的单元格添加填充图案,可通过以下两种方式实现:
方法一:叠加掩码区域(简洁高效)
利用布尔掩码定位目标单元格,通过叠加透明的pcolormesh层实现hatch效果,代码修改如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap # 替换为你的实际all_channel_maps数组 all_channel_maps = np.random.randint(0, 5, (10, 10)) colors = ['darkgreen', 'darkred', 'red', 'green', 'lightgray'] to_plot = np.swapaxes(all_channel_maps, 0, 1) # 绘制基础颜色网格 plt.pcolormesh(to_plot, edgecolors='k', linewidth=0.1, cmap=ListedColormap(colors)) ax = plt.gca() ax.set_aspect('equal') # 为值为0的单元格添加斜线填充 mask_0 = to_plot == 0 plt.pcolormesh(mask_0, hatch='///', alpha=0, edgecolors='none') # 为值为1的单元格添加叉线填充(可自定义hatch样式) mask_1 = to_plot == 1 plt.pcolormesh(mask_1, hatch='xxx', alpha=0, edgecolors='none') plt.show()
关键说明:
- 先绘制基础颜色网格,保证所有单元格底色正确。
- 通过布尔掩码
to_plot == 0和to_plot == 1定位目标区域。 - 设置
alpha=0让填充色完全透明,仅显示hatch图案;edgecolors='none'避免额外边框干扰。 - Matplotlib支持多种hatch样式,例如
///、xxx、+++、|||、....等,可按需替换。
方法二:逐个绘制矩形补丁(精细控制)
若需要对每个单元格做个性化设置,可通过Rectangle补丁逐个绘制,代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from matplotlib.patches import Rectangle # 替换为你的实际all_channel_maps数组 all_channel_maps = np.random.randint(0, 5, (10, 10)) colors = ['darkgreen', 'darkred', 'red', 'green', 'lightgray'] cmap = ListedColormap(colors) to_plot = np.swapaxes(all_channel_maps, 0, 1) ax = plt.gca() ax.set_aspect('equal') x_size, y_size = to_plot.shape for i in range(x_size): for j in range(y_size): val = to_plot[i, j] # 绘制单元格底色边框 rect_base = Rectangle((i, j), 1, 1, facecolor=cmap(val), edgecolor='k', linewidth=0.1) ax.add_patch(rect_base) # 为目标值添加填充图案 if val == 0: rect_hatch = Rectangle((i, j), 1, 1, facecolor='none', edgecolor='none', hatch='///') ax.add_patch(rect_hatch) elif val == 1: rect_hatch = Rectangle((i, j), 1, 1, facecolor='none', edgecolor='none', hatch='xxx') ax.add_patch(rect_hatch) # 设置坐标轴范围适配网格 ax.set_xlim(0, x_size) ax.set_ylim(0, y_size) plt.show()
关键说明:
- 逐个创建矩形补丁,先绘制底色,再叠加hatch补丁。
- 适合需要为不同单元格设置不同hatch样式、颜色或透明度的场景。
内容的提问来源于stack exchange,提问作者Daniel Paczuski Bak
相关产品推荐
相关产品推荐

