Как добавить картинку в определенном месте к фигуре с помощью matplotlib? - PullRequest
1 голос
/ 22 декабря 2019

Я хотел бы добавить изображение к фигуре, и я хотел бы, чтобы оно масштабировалось по всей фигуре, когда окно изменено, чтобы оно оставалось на своей позиции. Я попытался добавить новые оси (add_axis) и annotationBboxes, но оба метода не удалось. Я могу нанести изображение на фигуру, но оно будет перемещаться при изменении размера окна. Вот соответствующий фрагмент моего кода:

class Field:
    def __init__(self, cords, rgb, lettuce=True):
        self.x = cords[0]
        self.y = cords[1]
        self.rgb = (rgb[0]/255, rgb[1]/255, rgb[2]/255)
        self.lettuce = lettuce

    def image(self):
        import matplotlib.pyplot as plt
        return plt.imread(self.__class__.__name__ + '.png', format='png')


class Board:
    def __init__(self, dim):
        self.dim = dim
        self.all_fields = []

    def add_field(self, field):
        self.all_fields.append(field)

    def show(self):
        import matplotlib.pyplot as plt
        import matplotlib.patches as pat
        plt.ion()
        fig = plt.figure()
        ax = fig.add_subplot(111, aspect='equal')
        ax.set_xlim((-1, self.dim + 1))
        ax.set_ylim((-1, self.dim + 1))
        plt.axis('off')
        for x in range(self.dim):
            for y in range(self.dim):
                ax.add_patch(pat.Rectangle((x, y), 1, 1,
                                           linewidth=1, edgecolor='k', facecolor=(1, 1, 1)))
        for field in self.all_fields:
            ax.add_patch(pat.Rectangle((field.x, field.y), 1, 1,
                                       linewidth=1, edgecolor='k', facecolor=field.rgb))
            im = field.image()
            newax = fig.add_axes([0.12, 0.54, 0.22, 0.1], anchor='NE')
            newax.imshow(im)
            newax.axis('off')
            if field.lettuce:
                ax.add_patch(pat.Circle((field.x + 0.5, field.y + 0.5), 0.2, facecolor=(0, 1, 0)))
        fig.canvas.draw()


P = Board(10)
A = Field((0, 4), (255, 106, 0))
P.add_field(A)
P.show()

Field picture

Поэтому я добавляю прямоугольники для создания сетки. Затем я добавляю цветные прямоугольники, которые представляют определенные поля. Теперь я хотел бы заменить оранжевый прямоугольник изображением пустыни. Этот последний шаг проблематичен, поскольку трудно разместить изображение в нужном месте, и оно перемещается при изменении размера окна.

the grid

...