Обновить matplotlib патчами

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

Реализуя свой код, я создаю массив патчей, по одному для каждого колеса и по одному для тела робота. Затем я просто хочу, чтобы эти три участка отображались на графике. Я могу инициализировать патчи, но когда я пытаюсь их перерисовать, я не могу заставить график перерисовывать себя.

Я знаю, что это, вероятно, вопрос, на который уже дан ответ, но я не могу найти никакого решения, которое работает для моего конкретного кода. Пожалуйста помоги!

def drawInitialize(self):

    #show the board itself
    x_lims = (0, self.width)
    y_lims = (0, self.length)
    self.fig = plt.figure(figsize=(5,5))
    self.ax = self.fig.add_subplot(111, aspect='equal')
    plt.xticks(np.arange(0, self.width+1, int(self.width/5)))
    plt.yticks(np.arange(0, self.length+1, int(self.length/5)))
    plt.xlim(x_lims)
    plt.ylim(y_lims)

    #print the robot (this works!)
    robotPatch = self.getRobotPatch()
    for i in range(len(robotPatch)):
        self.ax.add_patch(robotPatch[i])
        #self.ax.add_artist(robotPatch[i])
    plt.show()

def draw(self):
    self.ax.clear()
    robotPatch = self.getRobotPatch()
    for i in range(len(robotPatch)):
        self.ax.add_patch(robotPatch[i])
    plt.show() #THIS DOESNT WORK!!

#initialize the board, (this calls drawInitialize)
gb = GameBoard(500,750, Robot(300,450,1, wheel_radius=20, axel_length=85.0))

#this should rotate the robot and redraw it
for i in range(5):
    gb.draw() # this SHOULD redraw the robot! but nothing happens
    gb.robot.theta = gb.robot.theta + math.pi/2
    time.sleep(1)

iirc, вам нужно что-то вроде pyplot.draw вместо pyplot.show - эти примеры может вдохновить вас

jedwards 27.10.2018 00:27

Оказалось, что ничего не работало, потому что я все-таки использовал встроенный вместо автоматического. И я не понимал, что мне нужно перезапустить ядро, чтобы переключиться на автоматический режим. Мой код должен работать с изменением конфигурации графики Spyder на автоматический

Jay 27.10.2018 01:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
131
0

Другие вопросы по теме