You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:22:36