当我从sqlite查询中使用plotly的破折号将数百个点传递到scattermapbox时,性能非常慢。
将数据传递到仪表板应用程序中的散点图框的最佳方法是什么?
我看过示例(https://github.com/plotly/dash-uber-rides-demo) 具有更多的数据点,它们的性能要好得多。
我不确定这是由于数据结构(nd.array,dataframe,sqlalchemy查询结果)还是所使用的接口(graph_objs.scattermapbox与dcc.graph)引起的。
Dash文档中的示例通过不同的方式传递数据,并且使用不同的导入/接口。 dcc与graph_objs。
我正在使用dcc.graph,来自查询结果的理解:
s = session
surveys = s.query(Survey).all()
locations = [s.location for s in surveys if s.location]
figure = {
'data': [
{
'type': 'scattermapbox',
'lat': [l.lat],
'lon': [l.lon],
"mode": "markers",
} for l in [s.location for s in surveys if s.location]
],
'layout': {
'mapbox': {...}
}
}
app.layout = html.Div([
dcc.Graph(
id='map',
figure=figure,
)
])
# Remap based on zip of any clicked point
@app.callback(
[Output('map', 'figure'),
Output('click-data', 'children')],
[Input('map', 'clickData'), Input('button', 'n_clicks')],
# [State('dropdown', 'value')],
)
def on_click(clickData, n_clicks):
data = clickData
point = data['points'][0]
# Use lat, lon to query the database
loc = s.query(Location).filter((Location.lat == point['lat']) & (Location.lon == point['lon'])).first()
locations = s.query(Location).filter(Location.zip == loc.zip)
figure = {
'data': [
{
'type': 'scattermapbox',
'lat': [l.lat],
'lon': [l.lon],
"mode": "markers",
} for l in locations
]
}
return figure
预期结果: 性能类似于Uber游乐设施破折号示例
实际结果: 重新查询新地图需要大约30秒