如何最佳地将数据传递到Plotly Dash Scattermapbox?

时间:2019-05-24 15:22:23

标签: python flask plotly plotly-dash

当我从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秒

0 个答案:

没有答案