在 Plotly Dash 中使用多条轨迹实时回调图形
Call back in real time graph with multiple traces in Plotly Dash
如何制作包含多条轨迹的实时动态更新图?
对于每个时间间隔,我需要从“tmp.txt”读取行到数据['prof']和数据['pred']并更新折线图。
我在这里 (https://pythonprogramming.net/live-graphs-data-visualization-application-dash-python-tutorial/) 找到了实时更新的解决方案,但它没有显示如何对多个跟踪进行 @app.callback。我还发现它使用了过时的“事件”。
我的代码如下,如果有人能帮助我,我将不胜感激。谢谢
import dash
import dash_daq as daq
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from collections import deque
def read():
with open ("tmp.txt", "r") as f:
for line in f:
data=line.split(',')
return data
i=0
data = { 'prof':deque(maxlen=120), 'pred': deque(maxlen=120) }
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(
children=[
dcc.Interval(id='timer', interval=1000),
html.Br(),
html.Div([
dcc.Graph(id='graph')
])
])
@app.callback(Output('graph','figure'), [Input('timer','n_intervals')])
def update_graph():
data=read()
data=read()
X.append(i)
data['prof'].append(float(data[1]))
data['pred'].append(float(data[2]))
figure={
'data':[
{'x':X,'y':CPU['prof'],'type':'scatter','name':'Profiled'},
{'x':X,'y':CPU['pred'],'type':'scatter','name':'Predicted'}
]}
i+=1
return figure
编辑:
'tmp.txt' 是一个不断被另一个程序覆盖的文件。
它只有一行,如下所示:
'3.2233 4.33445', 32, 74.0, 0.13, 0.0, 0.0
经过反复试验,最后我想出了一个解决方案 plotly.graph_objs:
....
dcc.Interval(id='timer', interval=1000),
html.Div([
dcc.Graph(id='graph', animate=True),
],
....
关于回调:
@app.callback(Output('graph', 'figure'),
[Input('timer', 'n_intervals')])
def update_graph_scatter(n):
data=read()
X.append(X[-1]+1)
data['prof'].append(float(data[1]))
data['pred'].append(float(data[2]))
data = [go.Scatter(
x=list(X),
y=list(CPU['prof']),
name='Prof',
mode= 'lines+markers'
),
go.Scatter(
x=list(X),
y=list(data['pred']),
name='Pred',
mode= 'lines+markers'
),
]
return {'data': data,'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
yaxis=dict(range=[0,380]))}
如何制作包含多条轨迹的实时动态更新图? 对于每个时间间隔,我需要从“tmp.txt”读取行到数据['prof']和数据['pred']并更新折线图。
我在这里 (https://pythonprogramming.net/live-graphs-data-visualization-application-dash-python-tutorial/) 找到了实时更新的解决方案,但它没有显示如何对多个跟踪进行 @app.callback。我还发现它使用了过时的“事件”。
我的代码如下,如果有人能帮助我,我将不胜感激。谢谢
import dash
import dash_daq as daq
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from collections import deque
def read():
with open ("tmp.txt", "r") as f:
for line in f:
data=line.split(',')
return data
i=0
data = { 'prof':deque(maxlen=120), 'pred': deque(maxlen=120) }
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(
children=[
dcc.Interval(id='timer', interval=1000),
html.Br(),
html.Div([
dcc.Graph(id='graph')
])
])
@app.callback(Output('graph','figure'), [Input('timer','n_intervals')])
def update_graph():
data=read()
data=read()
X.append(i)
data['prof'].append(float(data[1]))
data['pred'].append(float(data[2]))
figure={
'data':[
{'x':X,'y':CPU['prof'],'type':'scatter','name':'Profiled'},
{'x':X,'y':CPU['pred'],'type':'scatter','name':'Predicted'}
]}
i+=1
return figure
编辑: 'tmp.txt' 是一个不断被另一个程序覆盖的文件。 它只有一行,如下所示: '3.2233 4.33445', 32, 74.0, 0.13, 0.0, 0.0
经过反复试验,最后我想出了一个解决方案 plotly.graph_objs:
....
dcc.Interval(id='timer', interval=1000),
html.Div([
dcc.Graph(id='graph', animate=True),
],
....
关于回调:
@app.callback(Output('graph', 'figure'),
[Input('timer', 'n_intervals')])
def update_graph_scatter(n):
data=read()
X.append(X[-1]+1)
data['prof'].append(float(data[1]))
data['pred'].append(float(data[2]))
data = [go.Scatter(
x=list(X),
y=list(CPU['prof']),
name='Prof',
mode= 'lines+markers'
),
go.Scatter(
x=list(X),
y=list(data['pred']),
name='Pred',
mode= 'lines+markers'
),
]
return {'data': data,'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
yaxis=dict(range=[0,380]))}