【发布时间】:2021-09-25 01:32:35
【问题描述】:
我正在使用 plotly scattermapbox 并且正在改进代码。对于 scattermapbox 的customdata 属性,我想分配多个熊猫系列。在回调中,我读取了这些数据并根据点击事件填充了一个模式弹出窗口。代码如下:
layout = html.Div([
# Plot properties map
dcc.Graph(id="map-graph"),
html.Div([
dbc.Modal(
[
dbc.ModalHeader("Info"),
dbc.ModalBody(
[
dbc.Label("Name:"),
dbc.Label("Id"),
]
),
dbc.ModalFooter(
[
dbc.Button("OK"),
]
),
],
id="modal-1",
),
], style={"width": "50%"}),
)]
回调追加数据并为map-graph定义布局,只贴相关代码sn-p:
result_df = pd.DataFrame({'id': [1,2,3,4],
'name':['a','b','c','d'],
'val': [5,6,7,8],
'lat':[.....],
'long':[....]
})
data = []
lat = result_df["lat"]
lng = result_df["long"]
data.append({
"type": "scattermapbox",
"lat": lat,
"lon": lng,
"mode": "markers",
"clickmode": "event+select",
"customdata": { "Name": result_df["name"],
"id": result_df["id"]},
"marker": {
"symbol": "circle",
"size": 12,
"opacity": 0.7,
"color": "black"
}
}
)
读取customdata的回调,解析为json数据,然后根据选择填充modal。
@application.callback(
[
Output("modal-1","is_open"),
Output("name","children"),
Output("val","children"),
],
[
# Button clicks
Input("map-graph1","clickData"),
Input("c-button", "n_clicks"),
Input("close","n_clicks1")
],
[
State("modal-1", "is_open")
],
)
def display_popup(clickData, n_clicks, close, is_open):
if clickData:
res = json.dumps(clickData, indent=2)
Name = clickData["points"][0]["customdata"]["Name"]
id = clickData["points"][0]["customdata"]["id"]
return(not is_open, Name, id,)
elif close:
return is_open
else:
return (no_update)
当我打印时,clickData 的响应如下所示:
{
"points": [
{
"curveNumber": 0,
"pointNumber": 15,
"pointIndex": 15,
"lon": -118.27600459999998,
"lat": 34.0456796,
}
]
}
响应中缺少customdata。如何将数据绑定回(lat, long) 点击map-graph 并使用自定义数据中的Name、id 等信息填充模态。
【问题讨论】:
标签: python plotly mapbox plotly-dash