Как обновить сюжетный график в автономном режиме (блокнот Jupyter)
Я хотел бы создать простой интерфейс с сюжетом и ipywidgets внутри Jupyter Notebook (автономный режим), и мне интересно, как обновить график, если я хочу добавить дополнительные данные. Вот мой код:
import plotly
from plotly.offline import iplot
from plotly.graph_objs import graph_objs as go
import ipywidgets as widgets
from IPython.display import display
plotly.offline.init_notebook_mode(connected=True)
trace_high = go.Scatter(
x=[1,2,3,4],
y=[4,6,2,8],
name = "High",
line = dict(color = '#7F7F7F'),
opacity = 0.8)
data = [trace_high]
def plot_extra_data(drop):
if drop["new"] == "2":
trace_low = go.Scatter(
x=[1,2,3,4],
y=[1,7,3,5],
name = "Low",
line = dict(color = 'green'),
opacity = 0.8)
data.append(trace_low)
fig.update(data=data)
drop = widgets.Dropdown(
options=['1', '2', '3'],
value='1',
description='Number:',
disabled=False,
)
drop.observe(plot_extra_data, "value")
display(drop)
fig = dict(data=data)
iplot(fig)
Любые комментарии / предложения высоко ценятся.
1 ответ
Сумасшедший, как все, кажется, смущены взаимодействием с офлайн графиками!
Тем не менее, это довольно просто воспользоваться преимуществом присвоения имущества (например, см. Эту документацию, хотя теперь она частично устарела).
Пример наивного фрагмента ниже обновляет plotly.graph_objs.FigureWidget()
как пользователь взаимодействует через dropdown
виджет. На самом деле, pandas.DataFrame()
содержащие данные по оси X и Yaxis нарезаны вдоль Commodity
измерение, которое пользователь хочет отобразить на графике.
Вероятно, самая трудоемкая часть - это установить все дополнительные требования к библиотеке, если вы используете jupyterlab
import pandas as pd
import plotly.graph_objs as go
import ipywidgets as widgets
df = pd.DataFrame({'cmdty' : ['beans', 'beans', 'beans', 'corn', 'corn', 'corn'],
'month' : [1, 2, 3, 1, 2, 3],
'value' : [10.5, 3.5, 8.0, 5.0, 8.75, 5.75]})
items = df.cmdty.unique().tolist()
cmdty = widgets.Dropdown(options=items,
description='Commodity')
def response(change):
c = cmdty.value
df_tmp = df[df.cmdty == c]
x0 = df_tmp['month'] # Useless here as x is equal for the 2 commodities
x1 = df_tmp['value']
fig.data[0].x = x0 # Useless here as x is equal for the 2 commodities
fig.data[0].y = x1
fig = go.FigureWidget(data=[{'type' : 'scatter'}])
cmdty.observe(response, names='value')
display(widgets.VBox([cmdty, fig]))