Я потратил много времени в поисках чего-то, что могло бы обновить Plotly Scattergeo (карту мира) без перезапуска страницы и без использования Блокнот / Виджетов Jupyter.
По сути, я хотел бы иметь "кнопку" Filter
refre sh my dataset
. Например, выполните функцию foo
по нажатию кнопки и измените dataset
, который затем будет отражен на текущей нарисованной фигуре.
Вот минимальный рабочий пример:
import plotly.graph_objects as go
from typing import Dict, List, Tuple
data = [((-79.63059998, 43.67720032),(55.36439896, 25.25279999)),
((126.4509964, 37.46910095), (12.2388889, 41.8002778)),
((31.40559959, 30.12190056),(-0.461941, 51.4706))]
data = [ ((seg[0][1], seg[1][1]), (seg[0][0], seg[1][0])) for seg in data]
fig = go.Figure()
# generate all flight segments on a Scattergeo (world map)
for lat, lon in data:
fig.add_trace(
go.Scattergeo(
lat=lat,
lon=lon,
mode='lines',
line=dict(width=1, color='red')
),
)
# draw the plotly figure
fig.update_layout(
title_text='Flight Simulator',
showlegend=False,
geo=dict(
resolution=110,
showland=True,
showlakes=True,
landcolor='rgb(204, 204, 204)',
countrycolor='rgb(204, 204, 204)',
lakecolor='rgb(255, 255, 255)',
projection_type="equirectangular",
coastlinewidth=2,
lataxis=dict(
range=[-90, 90],
showgrid=True,
dtick=10
),
lonaxis=dict(
range=[-180, 180],
showgrid=True,
dtick=20
),
)
)
# adds the initial filters
fig.update_layout(
updatemenus=[
go.layout.Updatemenu(
active=0,
type="buttons",
direction="right",
buttons=list([
dict(label="Reset",
method="restyle",
args=[{"visible": [segment for segment in data]}]
),
dict(label="Filter",
method="restyle",
args=[{"visible": [segment for segment in data]}]
),
]),
pad={"r": 10, "t": 30, "b": 10},
showactive=True,
x=0.90,
xanchor="right",
y=1.15,
yanchor="top"
),
])
# display the figure to the screen
fig.show()
Если требуется перезапуск страницы, может ли он перерисовать на том же графике на этом экземпляре localhost?