Refre sh данных в Plotly без использования ноутбуков Jupyter - PullRequest
2 голосов
/ 06 января 2020

Я потратил много времени в поисках чего-то, что могло бы обновить 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...