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

Plotly地图线条按DataFrame列值上色问题求助(含报错代码)

解决Plotly地图线条按DataFrame列值上色的问题

你现在的问题是想让地图上的线条根据TKB_Total列的值呈现渐变色彩,但当前用px.line_geo的方式因为数据结构和参数用法不对,导致报错或不生效。下面是可行的解决方案:

核心问题分析

你之前把所有线条的坐标拼接成带None分隔的大数组,这种结构适合绘制多条线,但px.line_geo的color参数如果传入整条线对应的数值,会因坐标点和颜色值长度不匹配出问题。更合适的方式是把每条线作为独立轨迹添加,这样可以给每条线单独设置对应TKB_Total值的颜色。

完整实现代码

import plotly.graph_objects as go
import plotly.express as px
import numpy as np

# 假设你的DataFrame是mapa_TKB_coord,包含line(linestring)、O-D、TKB_Total列

# 1. 准备颜色刻度,采用反转后的RdBu渐变
color_scale = px.colors.sequential.RdBu[::-1]

# 2. 获取TKB_Total的极值,用于颜色映射
min_tkb = mapa_TKB_coord['TKB_Total'].min()
max_tkb = mapa_TKB_coord['TKB_Total'].max()

fig = go.Figure()

# 3. 遍历每条线路,逐个添加轨迹
for linestring, name, tkb_val in zip(mapa_TKB_coord['line'], mapa_TKB_coord['O-D'], mapa_TKB_coord['TKB_Total']):
    x, y = linestring.xy
    # 根据当前TKB值计算对应颜色
    normalized_val = (tkb_val - min_tkb) / (max_tkb - min_tkb)
    line_color = px.colors.sample_colorscale(color_scale, normalized_val)[0]
    
    fig.add_trace(go.Scattergeo(
        lat=y,
        lon=x,
        hovertext=name,
        mode='lines',
        line=dict(
            color=line_color,
            width=2  # 可按需调整宽度,也可绑定TKB_Total值动态变化,比如width=tkb_val/max_tkb*5
        )
    ))

# 4. 设置地图布局
fig.update_layout(
    geo=dict(
        projection_type='equirectangular'  # 按需求选择投影类型
    ),
    coloraxis=dict(
        colorscale=color_scale,
        cmin=min_tkb,
        cmax=max_tkb,
        colorbar=dict(title='TKB Total')
    )
)

fig.show()

关键说明

  • 改用plotly.graph_objects的Scattergeo逐个添加轨迹,每条线对应一个TKB_Total值,避免了坐标拼接带来的颜色匹配问题
  • 用px.colors.sample_colorscale实现数值到颜色的映射,自动适配你选择的渐变刻度
  • 之前的KeyError是因为px.line_geo的color参数无法处理拼接数组中的None值,以及颜色数组和坐标数组结构不匹配导致的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:17:07