我正在寻找一个 Dash 回调,它可以在单击或将鼠标悬停在 Mapbox 地图上后通过
go.Scattermapbox()
任何坐标(经度和纬度)进行访问。
如果
dcc.Graph
包含图像,则可以访问图像坐标,如下所示:https://github.com/AIMPED/plotly_dash/blob/master/plotlyDash_get_clickInfo.py
也可以通过回调
dash-leaflet
使用dl.Map()
访问地图坐标。但是,我想在我的项目中使用 Mapbox。
最后,在Javascript中可以通过鼠标悬停获取坐标,如Mapbox官网所示:https://docs.mapbox.com/mapbox-gl-js/example/mouse-position/ 还有纯Python的吗不使用任何 Javascript 的内置功能?
按照5eb的建议,点击时可以使用
clickData
返点。如下所示:
from dash import dash_table, dcc, html, Input, Output, State
from datetime import date
import dash_bootstrap_components as dbc
import pandas as pd
import dash
from urllib.request import urlopen
import json
import plotly.express as px
df = px.data.carshare()
fig = px.scatter_mapbox(df,
lat="centroid_lat",
lon="centroid_lon",
color="peak_hour",
size="car_hours",
mapbox_style="carto-positron",
hover_name='centroid_lat',
hover_data=['centroid_lat'],
color_continuous_scale=px.colors.cyclical.IceFire,
size_max=15,
zoom=10)
app = dash.Dash(__name__,external_stylesheets=[dbc.themes.LUX])
app.layout = dbc.Container([
dbc.Row([
dbc.Col([
dcc.Graph(id='maps', figure=fig)
],width={'size':10}),
dbc.Col([
html.Div(id='contents')
],width={'size':2})
])
],fluid=True)
@app.callback(Output('contents','children'),
Input('maps','clickData'))
def update_contents(clickData):
if clickData:
fips = clickData['points'][0]['hovertext']
dff= df[df['centroid_lat']==fips]
return html.Div([dash_table.DataTable(id='table',
columns=[{"name":i,"id":i} for i in dff.columns],
data=dff.to_dict(orient='records'))
])
if __name__ == "__main__":
app.run_server(debug=False)