从散点图框更改为密度图框会导致错误

时间:2019-10-17 16:07:52

标签: python plotly mapbox plotly-dash

我正在寻找解决此问题的方法。在小区社区(https://community.plot.ly/t/problem-with-densitymapbox-chart-type/28517)中,有一个与我的问题几乎类似的问题,但仍未找到解决方案。我的下拉菜单由scattermapbox和densitymapbox组成,我想在它们之间进行切换。但是,从scattermapbox更改为densitymapbox时,结果如下图所示:

densitymapbox after scattermapbox format     导入破折号     导入副本     导入路径库     导入破折号     将numpy导入为np     导入数学     导入日期时间为dt     将熊猫作为pd导入     从dash.dependencies导入Input,Output,State,ClientsideFunction     导入dash_core_components作为dcc     将dash_html_components导入为html     导入dash_table     随地导入plotly.graph_objs

# 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 :(得分:0)

这是一个Plotly.js错误,我已经在此处提交了报告:https://github.com/plotly/plotly.js/issues/4285