我是破折号的新手,并试图制作一个基本表以显示在IP上,以供所有人查看。这样可以避免需要电子邮件或将数据放置在特定位置。我使用以下代码创建了一个从文档中提取的非常简单的破折号表,但我想定期更新仪表板。为此,我使用任务计划程序每30分钟运行一次代码,杀死旧实例。这样,当“ data.csv”更新时,表中将显示一个新的数据框。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
df = pd.read_csv('data.csv')
def generate_table(dataframe, max_rows=30):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr([
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))]
)
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(children=[
html.H4(children='Title'),
generate_table(df, max_rows=len(df))
])
if __name__ == '__main__':
ADDRESS='100.100.100.100' #ipv4 address for computer code is run on
PORT=int(1000)
app.run_server(debug=True, host=ADDRESS, port=PORT)
我的问题是,尽管重新启动实例并更改了csv,但只会显示原始的csv数据。我只能通过更改端口并启动新的应用程序来解决它,这不是我想要的选择。如何获取同一应用程序以使用新的csv信息进行更新?
答案 0 :(得分:0)
我认为您不需要杀死“旧”应用实例,而每隔几分钟就运行一个新实例。您只需启动一次应用程序,然后将“更新间隔”设置为所需的时间(以毫秒为单位),以便应用程序在其继续运行的同时通过回调函数下载新数据。
此代码演示了这一点(Dash v1.6.0):
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_table
import pandas as pd
app = dash.Dash(__name__)
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
app.layout = html.Div([
html.H4('Dashboard'),
dcc.Interval('graph-update', interval = 2000, n_intervals = 0),
dash_table.DataTable(
id = 'table',
data = df.to_dict('records'),
columns=[{"name": i, "id": i} for i in df.columns])])
@app.callback(
dash.dependencies.Output('table','data'),
[dash.dependencies.Input('graph-update', 'n_intervals')])
def updateTable(n):
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
return df.to_dict('records')
if __name__ == '__main__':
app.run_server(debug=True, port=10451)
答案 1 :(得分:0)
无需重新创建图形即可更新数据。这样可以减少渲染延迟。
@app.callback(
Output(component_id='graph_map', component_property='figure'),
Input(component_id='scale_slider', component_property='value'),
State(component_id='graph_map', component_property='figure')
)
def update_output(set_scale, map_fig):
df = df_original[df_original['scale'] == set_scale]
map_fig['data'][0]['locations'] = df['cell_id'].tolist()
map_fig['data'][0]['z'] = df['color_id'].tolist()
return map_fig
cell_id-列名称,已在choropleth_mapbox'locations'中使用
color_id-列名称,已在choropleth_mapbox'color'中使用