You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly单个Scattermapbox Trace中绘制多条独立线段?

在Plotly单个Trace中绘制多条独立线段

问题背景

你需要在Scattermapbox的单个Trace中绘制多组独立线段,避免循环添加Trace导致的大量实例。之前的合并尝试仅显示第一条线段,核心原因是Plotly默认会将连续坐标视为连通线段,需要用特定方式分隔独立线段。

解决方案

Plotly支持通过插入NaN值分隔坐标序列的方式,在单个Trace中绘制多条独立线段。具体实现如下:

  • 将所有线段的经纬度坐标拼接成一个连续列表,每段线段的两个端点后插入一个NaN(用于断开线段)
  • 对应构建hover文本列表,每段线段的两个端点使用相同的hover文本,NaN位置可填空字符串

修改后的代码

import plotly.graph_objects as go

# 初始化连续坐标与hover文本容器
lon_combined = []
lat_combined = []
hover_texts_combined = []

# 遍历数据构建序列
for idx, row in transports_reduced.iterrows():
    # 添加当前线段的起点、终点,再插入NaN分隔
    lon_combined += [row['Quelle_lon'], row['Senke_lon'], None]
    lat_combined += [row['Quelle_lat'], row['Senke_lat'], None]
    # 为线段的两个点绑定相同的hover文本,NaN位置填空
    hover_texts_combined += [
        f'Transport value: {row["Sum LDM C3"]}',
        f'Transport value: {row["Sum LDM C3"]}',
        ''
    ]

# 移除末尾多余的NaN(可选,避免渲染空线段标记)
if lon_combined and lon_combined[-1] is None:
    lon_combined.pop()
    lat_combined.pop()
    hover_texts_combined.pop()

# 添加单个Trace
fig.add_trace(
    go.Scattermapbox(
        mode='lines',
        lon=lon_combined,
        lat=lat_combined,
        line=dict(width=2, color='green'),
        hoverinfo='text',
        hovertext=hover_texts_combined
    )
)

原理说明

Plotly在渲染线段时,遇到NaN值会自动终止当前线段,后续坐标会作为新的独立线段开始。通过这种方式,单个Trace就能承载所有独立线段,同时hover文本能精准对应到每段线段的两个端点,保证交互体验和原多Trace版本一致。

内容的提问来源于stack exchange,提问作者aushdk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:27:48