gpt4 book ai didi

python - 从破折号中的 map 框获取当前缩放和中心

转载 作者:行者123 更新时间:2023-12-03 19:09:43 26 4
gpt4 key购买 nike

我想用破折号制作交互式 map 。所以我添加了一个 Scattermapbox 来可视化一些数据。
为了选择显示哪些数据,我添加了一个 slider 。并使用回调来重绘 map 。

import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({'place_no': [1, 1, 1, 2, 2, 2],
'lat': [50.941357, 50.941357, 50.941357, 50.932171, 50.932171, 50.932171],
'lon': [6.957768, 6.957768, 6.957768, 6.964412, 6.964412, 6.964412],
'year': [2017, 2018, 2019, 2017, 2018, 2019],
'value': [20, 40, 60, 80, 60, 40]})


def get_map(df_map):
fig = go.Figure(go.Scattermapbox(
lat=df_map['lat'],
lon=df_map['lon'],
mode='markers',
marker=go.scattermapbox.Marker(
size=df_map['value']
),
))
fig.update_layout(
mapbox_style="open-street-map",
mapbox={'center': go.layout.mapbox.Center(lat=50.936600, lon=6.961497), 'zoom': 11}
)
return fig


app = dash.Dash()

app.layout = html.Div([
dcc.Graph(id='map',
figure=get_map(df[df['year'] == 2017])),
dcc.Slider(id='year-picker',
min=2017,
max=2019,
marks={2017: {'label': 2017}, 2018: {'label': 2018}, 2019: {'label': 2019}}
),
html.Div(id='shown-week', style={'textAlign': 'center'})
], )


@app.callback(
Output(component_id='map', component_property='figure'),
[Input(component_id='year-picker', component_property='value')]
)
def update_map(selected_year):
filtered_df = df[df['year'] == selected_year]
fig = get_map(filtered_df)
return fig


if __name__ == '__main__':
app.run_server()
现在效果很好。我得到了我期望的结果。
Screenshot Output
但如果移动或缩放 map ,然后用 slider 选择新数据,中心和缩放又回到初始值,非常不方便。
有什么方法可以让当前 View 的中心和缩放,所以我可以添加到 update-layout方法?
还是有其他方法可以保存当前 View ?

最佳答案

你试过uirevision属性(property)?如果在更新图形时将此属性设置为常量值,即

fig['layout']['uirevision'] = 'some-constant'
缩放等应该保持不变。详情见 documentation .

关于python - 从破折号中的 map 框获取当前缩放和中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62558312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com