我正在尝试创建一个带有绘图和破折号的交互式仪表板。我的目标是向Mapbox地图添加数据点(纬度,经度)。使用数据点静态创建地图效果很好,但是我需要通过下拉菜单来控制要在地图上显示哪些数据点。
我认为问题在于每次我尝试将数据传递到地图时,格式都不正确。错误对应的错误代码为: “响应”类型的对象不可JSON序列化
我已经尝试使用jasonify和json.dumps(objects)将数据转换为jason。我还在论坛/互联网上阅读了许多类似的问题(关于我的错误),但没有一个能帮助我弄清楚我的问题。
我通常使用教程并修改代码。我有类似的图形,下拉菜单等。但是地图不起作用。
有人可以向我解释我做错了什么吗?我想从答案中学习,但我对python的编程还不是很熟练。
如果您有任何疑问或我不够详细,请告诉我。
问候斯蒂芬
下面是我的代码:
from flask import jsonify
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
import plotly.plotly as py
import pyodbc
from sqlalchemy import create_engine
import numpy as np
mapbox_access_token = 'pk.eyJ1Ijoic2VtcGFoIiwiYSI6ImNqbHBoaXU5YjF5bHkzcHBncXFkejl0MjAifQ.0R2VfR5a8_owewhbx16a6w'
app = dash.Dash(__name__)
app.config['supress_callback_exceptions']=True
all_options = {
'Company1': ['52.33076869999999', '4.914620499999955'],
'Company2': [u'52.0916142', '5.106795599999941']
}
dict1 = {'name': 'Company1', 'lat': '52.33076869999999', 'lon': '4.914620499999955'}
dict2 = {'name': u'Company2', 'lat': '52.0916142', 'lon': '5.106795599999941'}
latitude = []
longtitude = []
def set_cities_value(available_options):
return available_options[0]['value']
@app.callback(
dash.dependencies.Output('display-selected-values', 'children'),
[dash.dependencies.Input('company-dropdown', 'value')])
@app.callback(
dash.dependencies.Output('graph', 'children'),
[dash.dependencies.Input('company-dropdown', 'value')])
def set_display_children(selected_company):
if selected_company == 'Company1':
lat = dict1['lat']
lon = dict1['lon']
latitude.append(lat)
longtitude.append(lon)
print(latitude)
print(longtitude)
else:
lat = dict2['lat']
lon = dict2['lon']
latitude.append(lat)
longtitude.append(lon)
datamap = [
go.Scattermapbox(
lat= latitude,
lon= longtitude,
mode='markers',
marker=dict(
size=10
),
text=['Testing'],
)
]
layoutmap = go.Layout(
autosize=False,
margin={
't':10
},
height=700,
hovermode='closest',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=dict(
lat=52.090737,
lon=5.12142
),
pitch=0,
zoom=6.6,
style='light',
),
)
fig = dict(data=datamap, layout=layoutmap)
app.layout = html.Div([
dcc.Dropdown(
id='company-dropdown',
options=[{'label': k, 'value': k} for k in all_options.keys()],
value='Company1'
),
html.Hr(),
dcc.Graph(id='graph', figure=fig),
html.Hr(),
html.Div(id='display-selected-values')
])
if __name__ == '__main__':
app.run_server(debug=True)