DASH 实时烛台图表在实时更新时消失但仍保留指标

Posted

技术标签:

【中文标题】DASH 实时烛台图表在实时更新时消失但仍保留指标【英文标题】:DASH Realtime candlestick chart dissapears when live updating yet its keeping the indicators 【发布时间】:2021-12-07 12:20:58 【问题描述】:

大家好,我正在制作 DASH 实时烛台图表,我偶然发现了一个问题,希望您能帮助我。

问题是当我运行该项目时,它会很好地加载烛台图和指标。 但是,一旦它按间隔更新,它就会消失,如果我尝试从图例选项卡中将其翼翼返回,它将在每次更新时执行此操作。 图表也可以正常工作,如果单独使用且没有指标,则可以正常更新,但是当将它们添加到图表中时,它会在 1 次更新后删除烛台图表的可见性。

正在从 Websocket 流中提取数据并转换为 SQL,然后转换为 pandas 数据帧。

这是发生的事情的图像:

这是代码:

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
    

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

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


    rec = pd.read_sql_table('crypto', engine)
    rec1 = pd.DataFrame(rec)
    print(rec1)
    rec1.columns = ['date', 'open', 'high', 'low', 'close', 'volume', 'EMA', 'EMA2']

    rec1['date'] = pd.to_datetime(rec1['date'])
    rec1.set_index('date', inplace=True)

    ###SUBPLOT AND Candlestick CHART
    fig = make_subplots(rows=4, cols=1)

    fig.add_trace(go.Candlestick(
        x=rec1.index,
        open=rec1['open'],
        high=rec1['high'],
        low=rec1['low'],
        close=rec1['close']),
        row=1,
        col=1,
    )

    ###### ADD INDICATOR TRACES:
    fig.add_trace(
        go.Scatter(
            x=rec1.index,
            y=rec1['EMA'],
            marker=dict(color='blue')
        ),
        row=1,
        col=1
    )
    fig.add_trace(
        go.Scatter(
            x=rec1.index,
            y=rec1['EMA2'],
            marker=dict(color='red')
        ),
        row=1,
        col=1
    )



    return fig



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

你对我能做什么有什么建议吗?我很乐意听到。

最好的问候。

马蒂亚斯

【问题讨论】:

【参考方案1】:

解决方法是查看graph对象中的animate属性。 https://dash.plotly.com/dash-core-components/graph

你必须指定动画选项,redraw = True,否则它不会画出来。 也许如果你不希望它重绘,你可以做一些附加函数,这样只有当前的蜡烛会被重绘。

但我的问题得到了解决。

【讨论】:

以上是关于DASH 实时烛台图表在实时更新时消失但仍保留指标的主要内容,如果未能解决你的问题,请参考以下文章

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

Plotly Dash 回调错误更新输出图

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

如何以编程方式(Python)抓取流式实时股票图表代码数据及其指标

Plotly Dash 图例中的自定义标记

如何在具有多个唯一图形的布局上实现 Dash/Plotly 清单持久性?