Я пытаюсь создать простое приложение. Цель состоит в том, чтобы создать раскрывающийся список и использовать раскрывающийся список в качестве фильтра. Отфильтрованные данные будут показаны на карте Google. Вот мой код:
К сожалению, он продолжает выдавать мне следующее сообщение об ошибке: «Ошибка типа: объект типа 'Figure' не поддерживает сериализацию в формате JSON". Я следовал тому же формату, используя выпадающее меню для фильтрации набора данных, и код работал нормально. Эта проблема возникала только тогда, когда я пытался отобразить данные. Но для этого школьного проекта мне нужно использовать Google Map API в Python, и это пока единственный способ, которым я знаю. Был бы признателен, если бы вы могли посоветовать, как обойти эту проблему. Большое спасибо
#import necessary packages
import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
import gmaps
import gmaps.datasets
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
gmaps.configure(api_key="") #Google Map API
df = pd.read_excel('') #read the Map file in
def create_data(choice): #this function takes in a keyword and filter the dataframe based on the keyword
data = df[df['Primary'] == choice]
return data
def create_map(data): #create a map with customized annotations
info_box_template = """
<dl>
<dt>Community Partner: </dt><dd>{CommunityPartner}</dd>
<dt>Address: </dt><dd>{Address}</dd>
</dl>
"""
dict1 = data.to_dict('records')
partner_info = [info_box_template.format(**partner) for partner in dict1]
marker_layer = gmaps.symbol_layer(data[['Lat', 'Longitude']], info_box_content=partner_info,
fill_color='rgba(0, 255, 0, 0.0)', stroke_color='rgba(200, 0, 0, 0.4)', scale=2)
omaha_coordinates = (41.25, -95.99)
fig = gmaps.figure(center=omaha_coordinates, zoom_level=12) #create the foundation map focused on Omaha first
fig.add_layer(marker_layer)
return fig
app = dash.Dash('') #create a Dash app
available_indicators = df.Primary.unique() #create a list of unique primary areas for options in the app.layout section later
app.layout = html.Div([ #this part is the dropdown
dcc.Dropdown(
id='dropdown-a',
options=[{'label': i, 'value': i} for i in available_indicators],
multi=False, placeholder='Filter by Primary Mission...'),
html.Div(id='output-a')
])
@app.callback( #this callback is to create the result of the dropdown action
dash.dependencies.Output('output-a', 'children'),
[dash.dependencies.Input('dropdown-a', 'value')])
def update_map(dropdown_value): #update the table
word = create_data(dropdown_value)
fig = create_map(word)
return fig
app.css.append_css({"external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"}) #the css to make it more beautiful
if __name__ == '__main__':
app.run_server()