我正在用 Python 实现 kmeans 聚类算法。我想在每次迭代中绘制集群质量的状态(图像)。所以,基本上我有一个循环,在每次迭代时绘制一个图像,我想为它制作动画。我不知道我是否说清楚了。目前我只使用 show() 命令来绘制图像,但我必须关闭它才能继续迭代。
那么,有什么方法可以让每一步计算的图像序列动画化吗?
最佳答案
我尝试了 ion()
方法,它适用于少量数据,但如果您有大图像或相对较快的图像流,则此方法非常慢。据我了解,ion()
会在您每次更改图形时重绘所有内容,包括轴和标签等。这可能不是您想要的。
This thread展示了一种更好的做事方式
这是我制作的一个简单示例,展示了如何执行此操作:
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
关于python - 使用 matplotlib Python 绘制一系列图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878200/