Python Matplotlib: динамически обновлять график - длина массива априори не известна
Я в курсе этих вопросов:(А), (В) а также(С) - все из которых касаются части моей проблемы.
Я также прочиталАнимация Поваренная книга
Однако мои вопросы, похоже, не рассматриваются ни в одном из вышеперечисленных.
Я хочу построить целевые функции, возвращаемые оптимизатором во время работы оптимизатора. Я не знаю заранее, сколько итераций запустит оптимизатор. Независимо от того, как я получаю массив, содержащий целевые функции, проблема может быть изолирована в этом минимальном примере:
import numpy as np
import matplotlib.pyplot as plt
SIZE = 50
R1 = 0.5
R2 = 0.75
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
fig.canvas.set_window_title('broken spiral')
for i in range(0, SIZE):
A.append(R1 * i * np.sin(i))
B.append(R2 * i * np.cos(i))
line1, = ax.plot(A,'-k',label='black')
line2, = ax.plot(B,'-r',label='red')
legend = ax.legend(loc=0)
plt.draw()
plt.savefig('test_broken_spiral.png')
Здесь сюжет только «псевдо» обновлен. Что действительно происходит, так это то, что для каждой итерации новая строка дляA
а такжеB
генерируется поверх оригинальной, но также генерирует новую запись легенды. После 50 итераций у меня есть 100 строк и 100 записей легенд.
Я попробовал это следующим образом:
for i in range(0, SIZE):
A.append(R1 * i * np.sin(i))
B.append(R2 * i * np.cos(i))
if i == 0:
line1, = ax.plot(A,'-k',label='black')
line2, = ax.plot(B,'-r',label='red')
legend = ax.legend(loc=0)
plt.draw()
else:
line1.set_ydata(A)
line2.set_ydata(B)
plt.draw()
plt.savefig('test_broken_spiral.png')
К сожалению, этот сюжет полностью испортил ось.
Я положилif i == 0
утверждение в, потому что я не знаю количество итераций заранее (да, я делаю в этом случае, но не в приложении, на которое оно нацелено) и каким-то образом должен «инициализировать» сюжет и легенду.
Мои вопросы можно обобщить следующим образом:
1.) Как мне обновить мой сюжет? Если я запускаю оптимизатор для 10 000 итераций, я не хочу, чтобы 10 000 вышележащих линий на моем графике (размер файла).
2.) Где я могу разместитьlegend
команда?
Я использую Python 2.6.6 и Matplotlib 0.99.1.1
Редактировать:
Этот кажется, похожий вопрос, с тем же вопросом без ответа.