简体   繁体   中英

How to fix ImportError: cannot import name 'Event' in Dash from plotly (python)?

i am working on data visualization task in which used Dash from plotly(python). when i am running the code i got an error which is -

ImportError: cannot import name 'Event'

i have tried various installation processes like pip install events or pip install Event , but i am not able to get my error's solution.

code:

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 was removed in the latest version (0.37) of Dash, that's why you cannot import it. See dev comment .

If you're bent on using it, switch to 0.36, but I'd not recommend that.

To preserve using the latest Dash version and keep updated you can use following code to fix the problem:

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)

The change in this code is just in the callback. The word n_intervals is the new way of Dash to handle events. As the name suggests, n_intervals keeps count of how many times the interval has fired, and so each time the interval fires, n_intervals gets incremented which triggers your callback. The only change you have to make to the callback is to an argument to receive n_intervals, which you can then ignore in the function body.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM