Python 如何在matplotlib中使用自定义图案填充填充多边形?

Python 如何在matplotlib中使用自定义图案填充填充多边形?,python,image,matplotlib,polygons,hatchstyle,Python,Image,Matplotlib,Polygons,Hatchstyle,我正在使用python和matplotlib创建几个闭合多边形。然后我需要用图案填充它们,这可以通过设置图案填充来完成 不幸的是,我正在处理灰度图像,并且我需要比默认情况下提供的更多图案填充-我更喜欢提供可以平铺的位图(或类似图像),而不是使用具有不同密度的图案填充 我对其他python库(pyglet、pygame、PIL等)持开放态度,但我更喜欢python中的解决方案。您可以对matplotlib.hatch.Shapes进行子类化,并基于在unit square[-0.5,0.5]x

我正在使用python和matplotlib创建几个闭合多边形。然后我需要用图案填充它们,这可以通过设置图案填充来完成

不幸的是,我正在处理灰度图像,并且我需要比默认情况下提供的更多图案填充-我更喜欢提供可以平铺的位图(或类似图像),而不是使用具有不同密度的图案填充


我对其他python库(pyglet、pygame、PIL等)持开放态度,但我更喜欢python中的解决方案。

您可以对
matplotlib.hatch.Shapes进行子类化,并基于在unit square[-0.5,0.5]x[-0.5,0.5]]内绘制的任何参考路径定义自定义图案填充

暂定:

import numpy as np
import matplotlib.hatch
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Polygon


house_path = Polygon(
    [[-0.3, -0.4], [0.3, -0.4], [0.3, 0.1], [0., 0.4], [-0.3, 0.1]],
    closed=True, fill=False).get_path()

class CustomHatch(matplotlib.hatch.Shapes):
    """
    Custom hatches defined by a path drawn inside [-0.5, 0.5] square.
    Identifier 'c'.
    """
    filled = True
    size = 1.0
    path = house_path

    def __init__(self, hatch, density):
        self.num_rows = (hatch.count('c')) * density
        self.shape_vertices = self.path.vertices
        self.shape_codes = self.path.codes
        matplotlib.hatch.Shapes.__init__(self, hatch, density)

matplotlib.hatch._hatch_types.append(CustomHatch)

fig = plt.figure()
ax = fig.add_subplot(111)

ellipse = ax.add_patch(Ellipse((0.5, 0.5), 0.3, 0.5, fill=False))
ellipse.set_hatch('c')
ellipse.set_color('red')
plt.show()
给予:


这里有一个例子,但作者说它很脆弱。标准的SETU孵化器有八个不同的孵化器,每个孵化器至少可以在两种密度下工作,并且可以组合。我认为在你用完舱口组合之前,情节就太混乱了。你有没有一个有几十个可用填充的灰度图案填充的例子?