回调变量?
Callback for variable?
我有以下代码:
# Import Libraries
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import datetime
import dash_bootstrap_components as dbc
date_cols = ["date"]
df = pd.read_csv('base.csv', parse_dates=date_cols)
fig=px.bar(df,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep, template='plotly_white'
)
likes = df['value_likes'].iloc[-1]
app = dash.Dash(__name__,external_stylesheets=[dbc.themes.BOOTSTRAP])
server = app.server
app.title = "CSV"
app.layout = html.Div([
dcc.Interval(
id='interval-component',
interval=10*1000, # in milliseconds
n_intervals=0
),
dbc.Container([
html.H1("REALTIME MONITORING"),
html.H4("%s" % likes),
dcc.Interval(id="progress-interval", n_intervals=0, interval=500),
dcc.Graph(id='graph', figure=fig)
],)
])
@app.callback(
Output('graph', 'figure'),
[Input('interval-component', "n_intervals")]
)
def streamFig3(value):
global df
dfglobal = pd.read_csv('base.csv',dtype={'date':'string'})
likes = dfglobal['value_likes'].iloc[-1]
fig=px.bar(dfglobal,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep_r, template='plotly_white'
)
return(fig)
if __name__ == "__main__":
app.run_server(debug=True)
此代码每 10 秒读取一次 csv 并相应地更新条形图。
但是它不会更新变量 likes,它在第一次加载后保持静态。
有没有办法进行回调,以便 likes 也更新?
提前谢谢你。
解决方法是
@app.callback(
Output('graph', 'figure'),
Output('likes-display', 'children'),
[Input('interval-component', "n_intervals")]
)
def streamFig3(value):
global df
dfglobal = pd.read_csv('base.csv',dtype={'date':'string'})
likes=dfglobal['value_likes'].iloc[-1]
fig=px.bar(dfglobal,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep_r, template='plotly_white'
)
return fig, str(likes)
并添加到 dbc.container
html.H4(id='likes-display'),
这将允许 likes 变量在回调中每 n 秒更新一次
这个答案 is based on the reply given here 来自 MichelH
我有以下代码:
# Import Libraries
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import datetime
import dash_bootstrap_components as dbc
date_cols = ["date"]
df = pd.read_csv('base.csv', parse_dates=date_cols)
fig=px.bar(df,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep, template='plotly_white'
)
likes = df['value_likes'].iloc[-1]
app = dash.Dash(__name__,external_stylesheets=[dbc.themes.BOOTSTRAP])
server = app.server
app.title = "CSV"
app.layout = html.Div([
dcc.Interval(
id='interval-component',
interval=10*1000, # in milliseconds
n_intervals=0
),
dbc.Container([
html.H1("REALTIME MONITORING"),
html.H4("%s" % likes),
dcc.Interval(id="progress-interval", n_intervals=0, interval=500),
dcc.Graph(id='graph', figure=fig)
],)
])
@app.callback(
Output('graph', 'figure'),
[Input('interval-component', "n_intervals")]
)
def streamFig3(value):
global df
dfglobal = pd.read_csv('base.csv',dtype={'date':'string'})
likes = dfglobal['value_likes'].iloc[-1]
fig=px.bar(dfglobal,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep_r, template='plotly_white'
)
return(fig)
if __name__ == "__main__":
app.run_server(debug=True)
此代码每 10 秒读取一次 csv 并相应地更新条形图。 但是它不会更新变量 likes,它在第一次加载后保持静态。 有没有办法进行回调,以便 likes 也更新? 提前谢谢你。
解决方法是
@app.callback(
Output('graph', 'figure'),
Output('likes-display', 'children'),
[Input('interval-component', "n_intervals")]
)
def streamFig3(value):
global df
dfglobal = pd.read_csv('base.csv',dtype={'date':'string'})
likes=dfglobal['value_likes'].iloc[-1]
fig=px.bar(dfglobal,x='date',y='value_likes',color='type', barmode='group',
color_discrete_sequence=px.colors.sequential.deep_r, template='plotly_white'
)
return fig, str(likes)
并添加到 dbc.container
html.H4(id='likes-display'),
这将允许 likes 变量在回调中每 n 秒更新一次
这个答案 is based on the reply given here 来自 MichelH