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