python - Matplotlib Canvas 绘图

标签 python algorithm matplotlib

假设我定义了一些函数来执行某些 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/

相关文章:

java - 带动态编程算法的资源分配

python - 我在绘制球体和曲线时遇到问题

Python递归扩展列表

python - Django 应用程序在迁移到 heroku MySQL ClearDB 时抛出 MigrationSchemaMissing

python - 为什么导入 win32ui 后脚本不会退出

python - “窗口”对象没有属性 '_tclCommands'

java - 具有多个升序值列表的数字排序

python - 循环绘制直方图并并排显示

python - 在相角图中使用没有视觉失真的循环色彩图?

python - 属性错误: 'OAndX' object has no attribute 'run'