Я попробовал метод ion()
, и он отлично работает для небольшого объема данных, но если у вас большие изображения или изображения передаются относительно быстро, этот метод ужасно медленный. Насколько я понимаю, ion()
будет перерисовывать все каждый раз, когда вы вносите изменения в свою фигуру, включая оси и метки и т. Д. Что может быть не тем, что вы хотите.
В этой теме показан гораздо более приятный способ ведения дел
Вот простой пример, который я сделал, показывающий, как это сделать:
import time
import numpy
import matplotlib.pyplot as plt
fig = plt.figure( 1 )
ax = fig.add_subplot( 111 )
ax.set_title("My Title")
im = ax.imshow( numpy.zeros( ( 256, 256, 3 ) ) ) # Blank starting image
fig.show()
im.axes.figure.canvas.draw()
tstart = time.time()
for a in xrange( 100 ):
data = numpy.random.random( ( 256, 256, 3 ) ) # Random image to display
ax.set_title( str( a ) )
im.set_data( data )
im.axes.figure.canvas.draw()
print ( 'FPS:', 100 / ( time.time() - tstart ) )
Я получаю около 30 FPS на моей машине с кодом выше. Когда я запускаю ту же самую вещь с plt.ion()
и ax.imshow( data )
вместо im.axes.figure.canvas.draw()
и im.set_data( data )
, я получаю около 1 FPS