我编写了一个python脚本,它使用启发式方法在空间中聚类2D点。我用不同的集群代表每个集群。
目前, 我的程序结构是:
def cluster():
while True:
<do_some_work>
if <certain_condition_is_met>:
print "ADDED a new cluster:",cluster_details
if <breaking_condition_is_met>:
break
return Res
def plot_cluster(result):
<chooses a unique color for each cluster, and calls
pyplot.plot(x_coods,y_coods)
for each cluster>
def driver_function():
result = cluster()
plot_cluster(result)
pyplot.show()
也就是说,目前,我只是获得了聚类点的最终图像,其中每个聚类用不同的颜色表示。
但是,我需要创建一个程序如何进行的动画,例如: “最初,所有点都应该是相同的颜色,比如说蓝色。然后,就像cluster()函数一样,不是简单地打印”添加新的聚类“,而是应该在图像中更改新聚类中这些点的颜色。已出现在屏幕上。
有什么方法可以使用matplotlib生成这样一个程序的视频? 我看到了一个
的例子`matplotlib.animation.FuncAnimation( ..., animate, ...)`
但是它反复调用应该返回plottable值的animate函数,我认为我的程序不能。
有没有办法获得这个程序如何进行的视频?
答案 0 :(得分:1)
要让这个按照您想要的方式工作需要一些重构,但我认为这样的事情会起作用:
class cluster_run(object):
def __init__(self, ...):
# what ever set up you want
self.Res = None
def reset(self):
# clears all work and starts from scratch
pass
def run(self):
self.reset()
while True:
#<do_some_work>
if <certain_condition_is_met>:
print "ADDED a new cluster:",cluster_details
yield data_to_plot
if <breaking_condition_is_met>:
break
self.Res = Res
class culster_plotter(object):
def __init__(self):
self.fig, self.ax = plt.subplots(1, 1)
def plot_cluster(self, data_to_plot):
# does what ever plotting you want.
# fold in and
x_coords, y_coords)
ln = self.ax.plot(x_coords, y_coords)
return ln
cp = cluster_plotter()
cr = cluster_run()
writer = animation.writers['ffmpeg'](fps=30, bitrate=16000, codec='libx264')
ani = animation.FuncAnimation(cp.fig, cp.plot_cluster, cr.run())
ani.save('out.mp4', writer=writer)
plot_cluster(cr.Res)
答案 1 :(得分:0)
使用pyplot.savefig('[frame].png')
是否足够,其中[frame]
是您的绘图的帧编号,然后使用编解码器(如ffmpeg)将这些图像拼接在一起?