Очистить графики, созданные ipywidgets.observe - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть ipywidget, который генерирует график каждый раз, когда изменяется выбор. В настоящее время графики добавляются друг к другу; Тем не менее, я хотел бы иметь только один сюжет (последний).

import ipywidgets as widgets 
import matplotlib.pyplot as plt
def f(change):
    if change['type'] == 'change' and change['name'] == 'value':
        plt.close('all')  # seems to have no effect
        plt.plot([0, 1],[0, 10])
        plt.title(change['new'])
        plt.show()

w = widgets.Select(options=[0, 1])
w.observe(f)
display(w)

Я безуспешно пытался:

Примечание: я не использую interactive, поскольку Я не хочу запускать все функции, когда любые изменения параметра .

1 Ответ

1 голос
/ 20 февраля 2020

Попробуйте отправить свои диаграммы в виджет Output, который можно использовать в качестве менеджера контекста, а затем очистить с помощью out.clear_output().

import ipywidgets as widgets 
import matplotlib.pyplot as plt
%matplotlib inline
out = widgets.Output(layout = widgets.Layout(height='300px'))

def f(change):
    if change['type'] == 'change' and change['name'] == 'value':
        with out:
            plt.plot([0, 1],[0, 10])
            plt.title(change['new'])
            out.clear_output()
            plt.show()

w = widgets.Select(options=[0, 1])
w.observe(f)
display(w)
display(out)
...