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

Plotly Scattermapbox绘制连线无报错但线条不显示问题求助

Scattermapbox 线条不显示问题解决方案

根本原因

你传入lat和lon参数的是二维NumPy数组,Scattermapbox要求这两个参数接收一维坐标序列,不会自动展平二维数组,因此无法识别坐标,无法渲染线条。
你通过g[1][["lat.start", "lat.end"]]索引得到的是两列DataFrame,转成NumPy数组后形状为(n,2)(n为当前分组行数),不符合参数要求。

解决方法

如果单个分组仅对应一条线段(分组内只有一行数据),直接用.flatten()把数组展平为一维即可:

fig = go.Figure(
    [
        go.Scattermapbox(
            name=g[0],
            lat=np.array(g[1][["lat.start", "lat.end"]]).flatten(),
            lon=np.array(g[1][["lon.start", "lon.end"]]).flatten(),
            mode="lines",
        )
        for g in df.groupby("attribute")
    ]
)

如果单个分组内有多条独立线段(分组内有多行,每行对应一组起止点),为了避免不同线段被错误连接,展平后需要在每两条线段的坐标之间插入空值:

fig = go.Figure(
    [
        go.Scattermapbox(
            name=g[0],
            lat=np.insert(g[1][["lat.start", "lat.end"]].values.flatten(), slice(2, None, 2), np.nan),
            lon=np.insert(g[1][["lon.start", "lon.end"]].values.flatten(), slice(2, None, 2), np.nan),
            mode="lines",
        )
        for g in df.groupby("attribute")
    ]
)

补充检查项

如果修改后线条仍然不显示,检查是否配置了正确的地图基础参数,确保初始视角覆盖你的线条坐标范围:

fig.update_layout(
    mapbox=dict(
        style="open-street-map", # 选用open-street-map样式不需要额外配置token
        zoom=8, # 按照你的坐标范围调整缩放等级
        center=dict(lat=中心点纬度, lon=中心点经度) # 初始地图中心设为你的线条覆盖区域中心
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:18:03