假设我定义了一些函数来执行某些 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()
获取要绘制的 Canvas 。现在我可以将 dostuff 修改为
def dostuff(ax):
ax.scatter([0.],[0.])
ax.get_figure().canvas.draw()
这会自动重新绘制 Canvas 。但是现在,假设我有以下代码:
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()
我可以调用这些函数中的每一个, Canvas 将被重绘,但在 doboth()
的情况下,它将被重绘多次。
我的问题是:我如何编写代码,以便 canvas.draw()
只被调用一次?在上面的例子中变化不大,但是在更复杂的情况下,可以单独或分组调用几十个函数,重复绘制就更明显了,能避免就好了。想过用装饰器,但是好像不太简单。
有什么想法吗?
最佳答案
为什么我对 this SO question of yours 的回答不是关于“刷新装饰器”让它变得简单?我准确地展示了如何执行您在这里再次请求的操作(通过计算嵌套数量——顺便说一下,嵌套也是线程安全的)而您完全忽略了我的回答……奇怪的行为! -)
关于python - Matplotlib Canvas 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2531333/