Путаница с сюжетом и обновлением графика в блокноте jupyter

1

Мой вопрос связан с этим сообщением SO. Тем не менее, я не хочу использовать взаимодействие, но я бы хотел назвать iplot кнопкой. К сожалению, график показан несколько раз в той же ячейке. Любые идеи, как этого избежать?

#%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np

import ipywidgets as widgets

import plotly.plotly as ply
import plotly.graph_objs as go
from plotly.widgets import GraphWidget
from plotly.offline import init_notebook_mode, iplot, plot

init_notebook_mode(connected=True)

#%%
def plotly_kin(x, y, color_list):
    """ A generic plot function for x,y line plots
    """
    # pop the first item from the colormap
    try:
        color = color_list.pop(0)
    except AttributeError:
        # reameke the colormap
        color_list = list(plt.cm.tab10.colors)
        color = color_list.pop(0)

    # create a line object
    line = go.Scatter(x=x, y=y, mode='scatter', name='test')
    # make a data object
    traces.append(line)
    iplot(traces, show_link=False)

#%%
traces = []

#%% this part works just fine
x = np.arange(0,10)
y = np.random.normal(size=len(x))

plotly_kin(x, y, 'a')

Выход всегда находится на одном графике: Изображение 174551

Однако эта часть не работает, потому что цифра добавляется к выходу ячеек:

def test_plot(message):
    x = np.arange(0,10)
    y = np.random.normal(size=len(x))
    plotly_kin(x, y, 'a')

button_test = widgets.Button(description='test')
button_test.on_click(test_plot)
display(button_test)

Изображение 174551

Теги:
jupyter-notebook
ipywidgets
plotly

1 ответ

1
Лучший ответ

Проблема в том, что нажатие кнопки не очищает предыдущий вывод ячейки. Если вы используете matplotlib, это можно решить, сначала создав фигуру и оси, и только обновив данные при нажатии кнопки, но я не думаю, что это возможно с plot.ly

Вместо этого вы можете использовать собственный API-интерфейс ноутбука, чтобы удалить существующий вывод ячейки, когда вы нажимаете кнопку. Это также удалит кнопку, поэтому в конце кода кнопки вам нужно заново создать кнопку.

from IPython.display import clear_output

def test_plot(message):
    clear_output()
    x = np.arange(0,10)
    y = np.random.normal(size=len(x))
    plotly_kin(x, y, 'a')
    create_button()

def create_button():
    button_test = widgets.Button(description='test')
    button_test.on_click(test_plot)
    display(button_test)

create_button()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню