【发布时间】:2011-02-01 15:30:06
【问题描述】:
假设我定义了一些函数来执行某些matplotlib 操作,例如
def dostuff(ax):
ax.scatter([0.],[0.])
现在如果我启动ipython,我可以加载这些函数并开始一个新的图:
In [1]: import matplotlib.pyplot as mpl
In [2]: fig = mpl.figure()
In [3]: ax = fig.add_subplot(1,1,1)
In [4]: run functions # run the file with the above defined function
如果我现在调用dostuff,那么图不会刷新:
In [6]: dostuff(ax)
然后我必须显式运行:
In [7]: fig.canvas.draw()
让画布绘制。现在我可以将 dostuff 修改为
def dostuff(ax):
ax.scatter([0.],[0.])
ax.get_figure().canvas.draw()
这会自动重新绘制画布。但是现在,假设我有以下代码:
def dostuff1(ax):
ax.scatter([0.],[0.])
ax.get_figure().canvas.draw()
def dostuff2(ax):
ax.scatter([1.],[1.])
ax.get_figure().canvas.draw()
def doboth(ax):
dostuff1(ax)
dostuff2(ax)
ax.get_figure().canvas.draw()
我可以调用这些函数中的每一个,画布会被重绘,但在doboth()的情况下,它会被重绘多次。
我的问题是:我该如何编码,这样canvas.draw() 只会被调用一次?在上面的例子中它不会有太大变化,但是在更复杂的情况下,有几十个函数可以单独调用或分组调用,重复绘制更加明显,能够避免它会很好。我想过使用装饰器,但看起来并不简单。
有什么想法吗?
【问题讨论】:
标签: python algorithm matplotlib