How to fix ImportError: cannot import name 'Event' in Dash from plotly (python)?
How to fix ImportError: cannot import name 'Event' in Dash from plotly (python)?
我正在从事数据可视化任务,其中使用了来自 plotly(python) 的 Dash。当我是 运行 代码时,我得到一个错误,即 -
ImportError: cannot import name 'Event'
我尝试了各种安装过程,如 pip install events 或 pip install Event,但我无法解决我的错误。
代码:
import dash
from dash.dependencies import Output, Event
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
x = deque(maxlen=20)
y = deque(maxlen=20)
x.append(1)
y.append(1)
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Graph(id = 'live-graph', animate = True),
dcc.Interval(
id = 'graph-update',
interval = 1000
)
]
)
@app.callback(Output('live-graph','figure'),
events = [Event('graph-update','interval')])
def update_graph():
globalx
globaly
x.append(x[-1]+1)
y.append(y[-1]+(y[-1]*random.uniform(-0.1,0.1)))
data = go.Scatter(
x = list (x),
y = list(y),
name = 'Scatter',
mode = 'lines+markers'
)
return {'data':[data],'layout':go.Layout(xaxis = dict(range = [min(x), max(x)]),
yaxis = dict(range = [min(y), max(y)]))}
if __name__ == '__main__':
app.run_server(debug = True, port = 8051)
Event
在 Dash 的最新版本 (0.37) 中已被删除,这就是您无法导入它的原因。参见 dev comment。
如果您执意要使用它,请切换到 0.36,但我不建议这样做。
要保留使用最新的 Dash 版本并保持更新,您可以使用以下代码来解决问题:
import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
X = deque(maxlen=20)
X.append(1)
Y = deque(maxlen=20)
Y.append(1)
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Graph(id='live-graph', animate=True),
dcc.Interval(
id='graph-update',
interval=1*1000
),
]
)
@app.callback(Output('live-graph', 'figure'),
[Input('graph-update', 'n_intervals')])
def update_graph_scatter(input_data):
X.append(X[-1]+1)
Y.append(Y[-1]+Y[-1]*random.uniform(-0.1,0.1))
data = plotly.graph_objs.Scatter(
x=list(X),
y=list(Y),
name='Scatter',
mode= 'lines+markers'
)
return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
yaxis=dict(range=[min(Y),max(Y)]),)}
if __name__ == '__main__':
app.run_server(host='0.0.0.0', port=8080 ,debug=True)
这段代码的变化只是在回调中。 n_intervals这个词是达世币处理事件的新方式。顾名思义,n_intervals 会记录间隔触发的次数,因此每次间隔触发时,n_intervals 都会递增,从而触发您的回调。您必须对回调进行的唯一更改是接收参数 n_intervals,然后您可以在函数体中忽略它。
我正在从事数据可视化任务,其中使用了来自 plotly(python) 的 Dash。当我是 运行 代码时,我得到一个错误,即 -
ImportError: cannot import name 'Event'
我尝试了各种安装过程,如 pip install events 或 pip install Event,但我无法解决我的错误。
代码:
import dash
from dash.dependencies import Output, Event
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
x = deque(maxlen=20)
y = deque(maxlen=20)
x.append(1)
y.append(1)
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Graph(id = 'live-graph', animate = True),
dcc.Interval(
id = 'graph-update',
interval = 1000
)
]
)
@app.callback(Output('live-graph','figure'),
events = [Event('graph-update','interval')])
def update_graph():
globalx
globaly
x.append(x[-1]+1)
y.append(y[-1]+(y[-1]*random.uniform(-0.1,0.1)))
data = go.Scatter(
x = list (x),
y = list(y),
name = 'Scatter',
mode = 'lines+markers'
)
return {'data':[data],'layout':go.Layout(xaxis = dict(range = [min(x), max(x)]),
yaxis = dict(range = [min(y), max(y)]))}
if __name__ == '__main__':
app.run_server(debug = True, port = 8051)
Event
在 Dash 的最新版本 (0.37) 中已被删除,这就是您无法导入它的原因。参见 dev comment。
如果您执意要使用它,请切换到 0.36,但我不建议这样做。
要保留使用最新的 Dash 版本并保持更新,您可以使用以下代码来解决问题:
import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
X = deque(maxlen=20)
X.append(1)
Y = deque(maxlen=20)
Y.append(1)
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Graph(id='live-graph', animate=True),
dcc.Interval(
id='graph-update',
interval=1*1000
),
]
)
@app.callback(Output('live-graph', 'figure'),
[Input('graph-update', 'n_intervals')])
def update_graph_scatter(input_data):
X.append(X[-1]+1)
Y.append(Y[-1]+Y[-1]*random.uniform(-0.1,0.1))
data = plotly.graph_objs.Scatter(
x=list(X),
y=list(Y),
name='Scatter',
mode= 'lines+markers'
)
return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
yaxis=dict(range=[min(Y),max(Y)]),)}
if __name__ == '__main__':
app.run_server(host='0.0.0.0', port=8080 ,debug=True)
这段代码的变化只是在回调中。 n_intervals这个词是达世币处理事件的新方式。顾名思义,n_intervals 会记录间隔触发的次数,因此每次间隔触发时,n_intervals 都会递增,从而触发您的回调。您必须对回调进行的唯一更改是接收参数 n_intervals,然后您可以在函数体中忽略它。