DASH 实时烛台图表不会更新,websocket,sqlalchemy,flask 应用程序

Posted

技术标签:

【中文标题】DASH 实时烛台图表不会更新,websocket,sqlalchemy,flask 应用程序【英文标题】:DASH Realtime candlestick chart wont update, websocket, sqlalchemy, flask app 【发布时间】:2022-01-12 00:07:03 【问题描述】:

我有这个烧瓶应用程序与 dash 连接,我从 python binance websocket 获取数据,并将其转换为 sql。

来自 websocket 流的 SQL 代码如下所示:

res1hf.to_csv('Crypto.csv', header=False)
rec = pd.read_csv('Crypto.csv')
rec.to_sql('crypto', engine, index=False, if_exists='replace')

然后我在终端中运行 websocket 以不断获取更新到数据库的流,并且它会按照预期进行更新。

但是,当我将它应用到我的 DASH 应用程序时,它不会实时更新图表。 如果我刷新页面,它会更新,但除此之外它没有做太多其他事情。

Flask/Dash/Waitress 应用的代码如下:

import plotly
import dash
from dash.dependencies import Output, Input
from dash import dcc
from dash import html
import pandas as pd
import plotly.graph_objs as go
import flask
import waitress
from waitress import serve


server = flask.Flask(__name__) # define flask app.server

app = dash.Dash(__name__, server=server) # call flask server


rec = pd.read_sql_table('crypto', engine)
  
app.layout = html.Div(
    html.Div([
        dcc.Graph(id='live-update-graph-scatter', animate=True),
        dcc.Interval(
            id='interval-component',
            disabled=False,
            interval=1*1000,
            n_intervals=0
        )
    ])
)

@app.callback(Output('live-update-graph-scatter', 'figure'),
              [Input('interval-component', 'n_interval')])
def update_graph_scatter(n):

    def updatesql(n):
        rec1 = pd.DataFrame(rec)
        rec1.columns = ['date', 'open', 'high', 'low', 'close', 'volume']

        rec1['date'] = pd.to_datetime(rec1['date'])
        rec1.set_index('date', inplace=True)
        print(rec1)
        return rec1
    rec1 = updatesql(n)


    data = plotly.graph_objects.Candlestick(
        x=rec1.index,
        open=rec1['open'],
        high=rec1['high'],
        low=rec1['low'],
        close=rec1['close'])

    return 'data': [data],

            'layout' : go.Layout(xaxis=dict(range=[min(rec1.index), max(rec1.index)],
                     linecolor='white',
                     linewidth=2,
                     gridcolor='white'
                     ),

          yaxis=go.YAxis(dict(range=[min(rec1.low) - 5, max(rec1.high) + 5],
                              linecolor='white',
                              linewidth=2,
                              gridcolor='white'
                              )
                         ),
         title='BNB Price',
         plot_bgcolor='white',
         paper_bgcolor='white',
         font='color': 'black',
         legend='orientation': "h", 'x': .1, 'y': -.2
         )





if __name__ == '__main__':
    serve(app.server, host="localhost", port=8080)

我也尝试过更改端口,但这也无济于事。

关于我如何解决这个问题的任何建议?

最好的问候。

马蒂亚斯。

【问题讨论】:

【参考方案1】:

您应该在回调中定位Interval 组件的n_intervals 属性(您定位n_interval,即您似乎缺少一个“s”)。

【讨论】:

非常感谢,错过了它真是太愚蠢了,它可以正常工作,并且所有内容都会按应有的方式更新。感谢您的帮助。

以上是关于DASH 实时烛台图表不会更新,websocket,sqlalchemy,flask 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Dash Plotly中的烛台图和折线图,它会随着回调而更新,但会消失

Plotly Dash 回调错误更新输出图

Plotly Dash 图例中的自定义标记

Plotly-Dash 实时图表:回调失败

谷歌图表:向烛台图表添加点

如何在单个浏览器页面上向 Dash 应用程序添加多个图表?