Обновить данные графика с помощью matplotlib.figure в python
Я хотел бы обновить y-данные в моем 2-мерном графике без необходимости каждый раз вызывать 'plot'
from matplotlib.figure import Figure
fig = Figure(figsize=(12,8), dpi=100)
for num in range(500):
if num == 0:
fig1 = fig.add_subplot(111)
fig1.plot(x_data, y_data)
fig1.set_title("Some Plot")
fig1.set_ylabel("Amplitude")
fig1.set_xlabel("Time")
else:
#fig1 clear y data
#Put here something like fig1.set_ydata(new_y_data), except that fig1 doesnt have set_ydata attribute`
Я мог очистить и построить график 500 раз, но это замедлило бы цикл. Любая другая альтернатива?
1 ответ
См. http://matplotlib.org/faq/usage_faq.html для описания частей рисунка mpl.
Если вы пытаетесь создать анимацию, взгляните на matplotlib.animation
модуль, который заботится о большинстве деталей для вас.
Вы создаете Figure
объект, поэтому я предполагаю, что вы знаете, что делаете и позаботились о создании холста в другом месте, но для этого примера будем использовать интерфейс pyplot для создания фигуры / осей
import matplotlib.pyplot as plt
# get the figure and axes objects, pyplot take care of the cavas creation
fig, ax = plt.subplots(1, 1) # <- change this line to get your axes object differently
# get a line artist, the comma matters
ln, = ax.plot([], [])
# set the axes labels
ax.set_title('title')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
# loop over something that yields data
for x, y in data_source_iterator:
# set the data on the line artist
ln.set_data(x, y)
# force the canvas to redraw
ax.figure.canvas.draw() # <- drop this line if something else manages re-drawing
# pause to make sure the gui has a chance to re-draw the screen
plt.pause(.1) # <-. drop this line to not pause your gui