0

我编写了一个 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() 函数一样,而不是简单地打印”添加一个新的cluster”,新集群中这些点的颜色,应该在屏幕上已经存在的图像中更改。

有什么方法可以使用 matplotlib 生成此类程序的视频吗?我看到了一个例子

`matplotlib.animation.FuncAnimation( ..., animate, ...)`

但它反复调用应该返回可绘制值的动画函数,我认为我的程序不能。

有没有办法获得这样一个关于这个程序如何进行的视频?

4

2 回答 2

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)
于 2013-09-06T16:35:05.860 回答
0

pyplot.savefig('[frame].png')使用 , 你的绘图的帧号在哪里就足够了[frame],然后使用诸如 ffmpeg 之类的编解码器将这些图像拼接在一起?

于 2013-09-06T13:41:12.097 回答