Переход от scattermapbox к densitymapbox вызывает ошибку - PullRequest
1 голос
/ 17 октября 2019

Я искал решение этой проблемы, с которой столкнулся. Есть вопрос, почти похожий на мой в сообществе графиков (https://community.plot.ly/t/problem-with-densitymapbox-chart-type/28517),, но он все еще не нашел разрешение. Мое выпадающее меню состоит из scattermapbox и densitymapbox, так как я хотел перетаскивать их между собой. Однако при переходе от scattermapbox кПлотность карты, это приводит к изображению ниже:

Плотность карты после формата scattermapbox import dash import copy import pathlib import dash import numpy as np import math import datetime как dt import pandas как pd from dash. импорт зависимостей Input, Output, State, ClientsideFunction import dash_core_components как dcc import dash_html_components как html import dash_table import plotly.graph_objs as go

# get relative data folder
PATH = pathlib.Path(__file__).parent
DATA_PATH = PATH.joinpath("data").resolve()

external_scripts = [
‘https://cdn.plot.ly/plotly-1.39.1.min.js’
]

external_stylesheets = [
‘https://codepen.io/etpinard/pen/wxwPXJ’
]

app = dash.Dash(
    __name__, 
    external_scripts=external_scripts,
    external_stylesheets=external_stylesheets
)

server = app.server

# Load data
df = pd.read_excel("Clean_TR(6.8.19).xlsx")

group_name = df['gname'].unique()

mapbox_access_token = <your token>

app.layout = html.Div(
    [
        dcc.Store(id = 'aggregate_data'),
        dcc.Dropdown(
            id = 'map_plot',
            options = [{'label':i, "value":i} for i in ['Scatter', 'Density']],
            value = ['Scatter']
        ),
        dcc.Graph(id = 'mindanao-map')
    ]
)

@app.callback(
    Output('mindanao-map', 'figure'),
    [Input('map_plot', 'value')]
)
def update_map(map_plot):
    if map_plot == "Density":
        maptype = 'densitymapbox'
    else:
        maptype = 'scattermapbox'

    return {
        'data' : [{
                'lat':df['latitude'],
                'lon':df['longitude'],
                'marker':{
                    'color': df['freq'],
                    'size': 8,
                    'opacity': 0.6
                },
                'customdata': df['idno'],
                'type': maptype
        }],
        'layout': {
            'mapbox': {
                'accesstoken': mapbox_access_token,
                'style':"light",
                'center': dict(lon=123.30, lat= 7.50),
                'zoom':'6',
            },
            'hovermode': 'closest',
            'margin': {'l': 0, 'r': 0, 'b': 0, 't': 0}
        }
    }

if __name__ == "__main__":
    app.run_server(debug=True)

Но всякий раз, когда я меняю порядок if-else, т.е.

if map_plot == "Scatter":
    maptype = 'scattermapbox'
else:
    maptype = 'densitymapbox'

это приводит к отображению карты плотности, но разброс не будет. Нужно ли разделять эти два вместо if-else? Любые входные данные подойдут. Спасибо за ваше время!

1 Ответ

0 голосов
/ 18 октября 2019

Это ошибка Plotly.js, и я отправил отчет здесь: https://github.com/plotly/plotly.js/issues/4285

...