Вопрос по python, python-2.7 – Простая анимация 2D координат с использованием matplotlib и pyplot

7

Я новичок в matplotlib. У меня есть список координат x-y, которые я обновляю в python и хочу анимировать, используя pyplot matplotlib. Я хочу заранее указать x-range и y-range. Ниже мой текущий код:

import matplotlib.pyplot as plt
x=[1,2,3,4]
y=[5,6,7,8]
for t in range(100):
    #lists x and y get updated here
    #...
plt.plot(x, y, marker='o', linestyle='None')
plt.show()

Как видите, я используюplt.plot() а такжеplt.show() в конце моего итерационного цикла для построения только окончательных координат. Но я хочу поставить этот шаг Внутри цикл и график на каждой итерации с указанным временем паузы, чтобы у меня была анимация во время выполнения цикла.

Просто переместить это утверждение в цикл или настроить его не работает. Я хочу, чтобы все было очень просто, и не хочу использоватьmatplotlib.animation. Есть ли какой-то простой метод без использования большего количества модулей и библиотек (только такие вещи, какplt.pause() и, может быть, еще немного) это позволит мне делать то, что я хочу?

Я просмотрел много мест в Интернете, и проблема, с которой я сталкиваюсь при использовании большинства методов, заключается в том, что я использую для этого python (x, y) (это версия python 2.7) в Windows, и анимация, использующая слишком сложные модули и библиотеки, вылетает здесь. .

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

Ваш Ответ

1   ответ
8

Это адаптировано издемонстрация анимации:

import matplotlib.pyplot as plt 
import numpy as np

fig, ax = plt.subplots()

x = [1, 2, 3, 4]
y = [5, 6, 7, 8]

for t in range(10):
    if t == 0:
        points, = ax.plot(x, y, marker='o', linestyle='None')
        ax.set_xlim(0, 10) 
        ax.set_ylim(0, 10) 
    else:
        new_x = np.random.randint(10, size=5)
        new_y = np.random.randint(10, size=5)
        points.set_data(new_x, new_y)
    plt.pause(0.5)

В то время как это просто строка документации говорит, что это медленно.

Это может быть удобно использоватьax.clear(); тогда вы можете просто построить новую фигуру, и вам не нужно различать первый и последующий прогоны. Также,plt.pause() вызвал ошибку для меня, я использовалfig.canvas.start_event_loop() вместо.
Это отлично сработало с моей программой. Принято. И спасибо! Abhranil Das
+1. Это работает. Я просто попытаюсь адаптировать его к моей окончательной программе и посмотреть, как это будет происходить. Abhranil Das

Похожие вопросы