2

我面临的问题是在情节上重新绘制一个小圆圈的速度很慢。

我目前正在做相当于 Joe Kington 的回答中列出的交互式类 - matplotlib: update position of patch (or: set_xy for circles)

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import time

class InteractiveCircle(object):
    def __init__(self):
        self.fig, self.ax = plt.subplots()
        self.ax.axis('equal')

        self.circ = Circle((0.5, 0.5), 0.1)
        self.ax.add_artist(self.circ)
        self.ax.set_title('Click to move the circle')

        self.fig.canvas.mpl_connect('button_press_event', self.on_click)

    def on_click(self, event):
        if event.inaxes is None:
            return
        self.circ.center = event.xdata, event.ydata
        start_time = time.time()
        self.fig.canvas.draw()
        print "%f" %(time.time() - start_time)

    def show(self):
        plt.show()


InteractiveCircle().show()

这需要 >800 毫秒才能在图中重新绘制一个小圆圈!

我从http://matplotlib.1069221.n5.nabble.com/blit-animation-with-patches-td25634.html尝试了 self.ax.draw_artist(self.circ) 。这需要 <1ms 但不会重绘圆圈:)

我很惊讶更新图表的一小部分是如此缓慢。我正在寻找<1ms 的解决方案。

有什么建议么?

编辑:删除对 tkinter 的引用作为缓慢可以通过仅 matplotlib 的示例重现

编辑:操作系统 - RHEL 5.8

matplotlib --verbose-helpful output
version 1.2.0
platform is linux2
backend TkAgg version 8.6

编辑:我在 SSH 上使用 X-windows

4

0 回答 0