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

如何修改Matplotlib中Patch自定义填充图案的平铺方式?

修改Matplotlib自定义填充图案的平铺方式(网格状替代错缝)

问题说明

需要将Matplotlib Patch内的自定义填充图案从默认的错缝排列(砖块式)改为网格状平铺(每行对齐),现有自定义Hatch代码生成的是错缝效果,需调整核心逻辑。

核心修改思路

Matplotlib内置的Shapes类生成错缝的原因是:在计算每行图案的顶点时,会给奇数行添加0.5倍图案尺寸的X轴偏移。要实现网格状平铺,需重写Shapes类的set_vertices方法,强制所有行的X偏移量为0,取消错缝逻辑。

修改后的完整代码

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.hatch

# 定义自定义填充图案的路径(基于[-0.5, 0.5]的标准范围)
square_path = patches.Polygon(
    [[-0.4, -0.4], [0.4, -0.4], [0.4, 0.4], [-0.4, 0.4]],
    closed=True, fill=False).get_path()

class SquareHatch(matplotlib.hatch.Shapes):
    """自定义网格状填充图案,标识符's'"""
    filled = True
    size = 1.0
    path = square_path

    def __init__(self, hatch, density):
        self.num_rows = int((hatch.count('s')) * density)
        self.shape_vertices = self.path.vertices
        self.shape_codes = self.path.codes
        super().__init__(hatch, density)

    def set_vertices(self, vertices, path):
        """重写顶点计算逻辑,取消错缝偏移"""
        num_rows = self.num_rows
        num_cols = self.num_cols
        size = self.size
        # 遍历所有行,强制X偏移为0,实现网格对齐
        for i in range(num_rows):
            y = -0.5 + (i + 0.5) / num_rows
            for j in range(num_cols):
                x = -0.5 + (j + 0.5) / num_cols
                # 所有行使用相同的X偏移,无错缝
                vertices[:] += [x * size, y * size]
                path.append((vertices, self.shape_codes))
                vertices = vertices.copy() - [x * size, y * size]

# 注册自定义Hatch类型
matplotlib.hatch._hatch_types.append(SquareHatch)

# 测试代码
fig, ax = plt.subplots()
# 创建带自定义网格填充的矩形
square = patches.Rectangle(xy=(0.25, 0.25), width=0.5, height=0.5, hatch='s', fill=False)
ax.add_patch(square)
# 设置坐标轴范围,确保图案完整显示
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
plt.show()

关键修改点解析

  1. 修正图案路径范围:原代码中路径的X坐标超出了[-0.5,0.5]的标准范围,导致图案变形,修改为0.4以适配标准边界。
  2. 重写set_vertices方法:去掉原逻辑中对奇数行添加0.5*size X偏移的代码,让每行的X起始位置完全对齐,实现网格状平铺。
  3. 继承与初始化优化:使用super()替代直接调用父类初始化,代码更规范。

内容的提问来源于stack exchange,提问作者Regneva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:10:55