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
相关产品推荐
相关产品推荐

