Интерактивный график matplotlib: определение и построение многоугольника - PullRequest
1 голос
/ 05 мая 2020

Я создал сетку из шестиугольников, используя библиотеку matplotlib.patches. Фигура, отображаемая моей программой, является интерактивной: она позволяет выбрать шестиугольник левой кнопкой мыши, что приведет к заполнению шестиугольника черным цветом. Таким образом, я отмечаю окружность многоугольника:

hexagons

Теперь я хочу соединить заполненные шестиугольники так, чтобы я мог видеть окружность многоугольника. Я хочу, чтобы многоугольник рисовался при нажатии клавиши. Вот моя идея:

    def draw_circumference(event):
        if event.key == 'd':
            print(circumference)
            plt.Polygon(circumference, fill=False, edgecolor='k')
            #fig.canvas.draw()
    fig.canvas.mpl_connect("key_press_event", draw_circumference)

Переменная circumference содержит координаты (x, y) соответствующих центров отмеченных шестиугольников в виде списка кортежей: [(x1,y1), x2,y2), ..., (xn,yn)]. Я прокомментировал fig.canvas.draw(), потому что считаю, что он должен работать без этой строки. Но пока не работает ни с, ни без fig.canvas.draw().

Однако функция вызывается. Я знаю это, поскольку выполняется оператор печати.

Есть идеи, что я делаю не так?

1 Ответ

2 голосов
/ 05 мая 2020

Трудно отлаживать без полного кода, но обычно вам нужно добавить художник-патч, такой как многоугольник, явно к оси. Кроме того, вам, вероятно, понадобится вызов перерисовки, поскольку содержимое оси изменилось.

p = plt.Polygon(circumference, ...)
ax.add_patch(p) # or ax.add_artist(p)
fig.canvas.draw()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...