如何提高Python中Dash-Plotly线图的效率(速度)?

5
我正在使用Python的Dash Plotly库。我正在绘制实时数据,这些数据被记录在SQLite数据库中,目前我正在绘制一个单值与时间线图。我计划再添加20个图表,但随着时间增加,绘图变得越来越慢,我认为这是由于整个绘图重新绘制所致。所以请问是否有更有效的方法?我对dash-plotly还不熟悉,任何帮助都将对我有很大帮助。
谢谢。
import random
import dash
import plotly
import plotly.graph_objs as go
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Output, Input

X = list()
X.append(0)
Y = list()
Y.append(0)
app = dash.Dash(__name__, suppress_callback_exceptions=True,)
app.layout = html.Div([html.Div([
    dcc.Graph(id='live-graph'),
    dcc.Interval(
        id='graph-update',
        interval=0.05 * 1000
    ),
])
])

latest_sno = 0


@app.callback(Output('live-graph', 'figure'),
              [Input('graph-update', 'n_intervals')])
def update_graph_scatter(input_data):
    X.append(X[-1]+1)
    Y.append(0+random.randint(-2,2))
    data = plotly.graph_objs.Scatter(
        x=X,
        y=Y,
        name='lines',
        mode='lines'
    )
    if (len(X)) > 1000:
        x_l = max(X) - 1000
    else:
        x_l = 0
    return {'data': [data], 'layout': go.Layout(title="BMS_01_CellVolt_AVG01",
                                                xaxis=dict(range=[x_l, max(X) + 1]),
                                                yaxis=dict(range=[min(Y) - 0.15, max(Y) + 1]),
                                                yaxis_title="Voltage in (V)",
                                                xaxis_title="TIME",
                                                )}
if __name__ == '__main__':
    app.run_server(debug=True,port = 5050)

2
这回答解决了您的问题吗?Plotly/Dash 显示实时数据的流畅动画 - emher
1
嗨,谢谢回复。我看了链接,但对我没有帮助。我正在尝试消除重新绘制整个图形的任务。如果您查看我的代码,我使用2个列表(X Y)存储数据,并从中绘制图形,因此随着时间的增加,由于我再次重新绘制整个图形,所以绘图变得很卡顿。是否有一种方法可以仅跟踪最新的点,而不是所有点。 - rohith santosh
3
是的,在我发布的链接中,演示了如何通过针对“extendData”属性而不是“figure”属性来避免重新绘制整个图形。这样做可以提高性能。 - emher
如果您能帮忙看看我的代码,那将非常有帮助。 - rohith santosh
1
你说你想让别人修改你的代码,但是你的代码需要本地文件才能运行。如果你将你的代码编辑成一个mre,让其他人可以在不访问你的数据库的情况下运行它,那么你可能会更加幸运。 - 0x263A
显示剩余2条评论
1个回答

1
使用可扩展图表,您可以实现我的问题的解决方案。访问此链接以查找示例代码:https://community.plotly.com/t/extend-or-append-data-instead-of-update/8898/25

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接