Обновление графика Matplotlib с использованием виджетов I Python - PullRequest
1 голос
/ 11 февраля 2020

Я бы хотел использовать виджеты I Python для загрузки и печати или обновления изображения в виде одной фигуры matplotlib при каждом нажатии кнопки. Я не хочу создавать более одной фигуры, просто обновите существующую фигуру. Я пытался решить несколькими разными способами, но пока не увенчался успехом. Когда я помещаю plt.figure() вне функции loadimg(), она не отображается. Я планирую иметь в тетради несколько графиков для других целей, поэтому я избегаю использовать gca и gcf.

def loadimg():
    im = plt.imread(txt.value)
    ax = fig.add_subplot(111)
    ax.imshow(im)


txt = widgets.Text(value=str("img.png"), placeholder='', description='File Path:', disabled=False)
bt = mk_btn_file('...', txt)

bt_load = widgets.Button(description="Load")
bt_load.on_click(lambda self : loadimg())

row1 = widgets.HBox((txt,bt))
row2 = bt_load

display(widgets.VBox((row1,row2)))

fig = plt.figure()

Еще одна попытка заключалась в использовании Output (), но по какой-то причине, когда я нажимаю кнопка во второй раз, она очищает вывод и строит графики снова дважды, а не только один раз.

out = widgets.Output()
def loadimg():
    out.clear_output()
    with out:
        fig = plt.figure()
        ax = fig.add_subplot(111)
        im = plt.imread(txt.value)
        ax.imshow(im)
        print('Hello')
    display(out)

txt = widgets.Text(value=str("img.png"), placeholder='', description='File Path:', disabled=False)
bt = mk_btn_file('...', txt)

bt_load = widgets.Button(description="Load")
bt_load.on_click(lambda self : loadimg())

row1 = widgets.HBox((txt,bt))
row2 = bt_load

display(widgets.VBox((row1,row2)))

Есть идеи, как я могу это решить? Заранее спасибо

...