簡體   English   中英

如何修復ImportError:無法從Dally中在Dash中導入名稱'Event'(Python)?

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

我正在進行數據可視化任務,其中使用了plotly(python)中的Dash。 當我運行代碼時,出現了一個錯誤-

ImportError:無法導入名稱“事件”

我嘗試了各種安裝過程,例如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)中刪除,因此無法導入。 參見開發者評論

如果您打算使用它,請切換到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這個詞是Dash處理事件的新方法。 顧名思義,n_intervals會記錄間隔觸發的次數,因此每次間隔觸發時,n_intervals都會遞增,從而觸發您的回調。 您必須對回調進行的唯一更改是接收n_intervals的參數,然后您可以在函數主體中忽略該參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM