Матплотлиб рисунок на холсте - PullRequest
0 голосов
/ 28 марта 2010

Допустим, я определил несколько функций для выполнения определенных 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() вызывался только один раз? В приведенном выше примере это не сильно изменится, но в более сложных случаях с десятками функций, которые могут быть вызваны по отдельности или сгруппированы, повторное рисование является гораздо более очевидным, и было бы хорошо иметь возможность избежать этого. Я думал об использовании декораторов, но не похоже, что это будет просто.

Есть идеи?

1 Ответ

1 голос
/ 28 марта 2010

Почему мой ответ на этот ваш вопрос о "обновлении декоратора" не делает его простым? Я показал, что делать то, что вы снова запрашиваете здесь (сохраняя количество вложений - между прочим, одно также поточно-ориентированное), и вы полностью проигнорировали мой ответ ... странное поведение! )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...