使用Scattergeo绘制经纬度坐标连线时如何添加悬停文本?
问题解答
完全可以实现,这是Plotly的Scattergeo原生支持的能力,不需要额外的第三方工具。
实现逻辑
你只需要按如下规则组织数据即可:
- 把每一条航线的坐标拆成「起点经纬度 → 终点经纬度 → 空值」的序列,所有航线的序列拼接后统一传给
lon、lat参数,空值的作用是分隔不同航线,避免独立航线被连成一条连续的线 - 每一条航线对应的两个坐标点(起点、终点)都绑定相同的hover文本,空值对应的文本位可随意填空,不会触发展示
- 配置
hoverinfo = 'text'、hoveron = 'points+fills'即可实现悬停在航线任意位置都展示对应文本的效果
代码示例
import plotly.graph_objects as go # 你的航线数据,可按实际业务替换 flight_routes = [ {"start_lon": -73.7781, "start_lat": 40.6413, "end_lon": -122.3790, "end_lat": 37.6213, "hover_label": "JFK-SFO/38 flights"}, {"start_lon": -118.4085, "start_lat": 33.9428, "end_lon": -87.9073, "end_lat": 41.9742, "hover_label": "LAX-ORD/45 flights"} ] lons_list = [] lats_list = [] hover_texts = [] for route in flight_routes: # 追加单条航线的坐标序列 lons_list.extend([route["start_lon"], route["end_lon"], None]) lats_list.extend([route["start_lat"], route["end_lat"], None]) # 绑定对应hover文本 hover_texts.extend([route["hover_label"], route["hover_label"], ""]) fig = go.Figure() fig.add_trace(go.Scattergeo( lon = lons_list, lat = lats_list, mode = "lines", line = dict(width = 2, color = "#1f77b4"), text = hover_texts, hoverinfo = "text", # 支持悬停在线段和点位上都触发展示 hoveron = "points+fills" )) # 按需配置地图底图、投影等参数即可 fig.update_layout(geo = dict(scope = "north america")) fig.show()
补充说明
如果需要展示弧线(大圆航线)效果不需要手动计算坐标,Scattergeo会默认按球面投影自动生成弧线,不会影响hover文本的绑定逻辑。你也可以根据需求给不同航线设置差异化的线条颜色、宽度属性。
内容的提问来源于stack exchange,提问作者bananaman
相关产品推荐
相关产品推荐

