web-dev-qa-db-fra.com

Comment réparer ImportError: impossible d'importer le nom 'Event' dans Dash à partir de complot (python)?

je travaille sur la tâche de visualisation de données dans laquelle a utilisé Dash de complot (python). quand j'exécute le code, j'ai une erreur qui est -

ImportError: impossible d'importer le nom 'Event'

j'ai essayé divers processus d'installation comme les événements d'installation de pip ou l'événement d'installation de pip, mais je ne suis pas en mesure d'obtenir la solution de mon erreur.

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) 
4
chirag mehta

Event a été supprimé dans la dernière version (0.37) de Dash, c'est pourquoi vous ne pouvez pas l'importer. Voir commentaire du développeur .

Si vous êtes déterminé à l'utiliser, passez à 0,36, mais je ne le recommanderais pas.

3
Frenzy Kiwi

Pour conserver l'utilisation de la dernière version de Dash et rester à jour, vous pouvez utiliser le code suivant pour résoudre le problème:

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)

Le changement dans ce code est juste dans le rappel. Le Word n_intervals est la nouvelle façon de Dash pour gérer les événements. Comme son nom l'indique, n_intervals tient compte du nombre de fois que l'intervalle a été déclenché, et donc chaque fois que l'intervalle se déclenche, n_intervals est incrémenté, ce qui déclenche votre rappel. La seule modification que vous devez apporter au rappel est un argument pour recevoir n_intervals, que vous pouvez ensuite ignorer dans le corps de la fonction.

4
casjorge