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

Plotly Express地图颜色分配逻辑咨询:Severity字段着色疑问

问题原因与解决方法

颜色分配逻辑

当你的数据集里同一个FIPS(即地图上的单个区域)对应多条事故记录时,Plotly Express的choropleth_mapbox不会自动对该区域的color字段做聚合计算,而是直接取该FIPS分组下的最后一条记录的Severity值来给区域着色。这就是为什么FIPS 36021显示为Severity=4——只是该区域最后一条事故记录的Severity是4,和整体统计值无关。

解决步骤

要实现按区域的Severity统计值(平均值、中位数等)着色,必须先对原始数据按FIPS分组聚合,再用聚合后的数据集绘图:

  1. 聚合原始数据
    使用pandas对数据按FIPS分组,计算每个区域的Severity统计值(这里以平均值为例,你也可以换成中位数、总和等):

    import pandas as pd
    
    # 按FIPS分组,计算Severity的平均值,重置索引生成新数据集
    agg_data = data.groupby('FIPS')['Severity'].mean().reset_index()
    # 如果需要中位数,替换成:.median()
    
  2. 用聚合数据绘制地图
    把聚合后的数据集传入px.choropleth_mapbox,此时color参数对应聚合后的Severity统计列:

    import plotly.express as px
    
    fig = px.choropleth_mapbox(
        agg_data,
        geojson=counties,
        locations='FIPS',
        mapbox_style="open-street-map",
        color="Severity",  # 这里使用聚合后的统计值
        zoom=6,
        center=dict(lat=42.8, lon=-75.3),
        height=800,
        width=1200,
        opacity=0.5,
        color_continuous_scale="Viridis"  # 可选,自定义颜色刻度
    )
    fig.show()
    

为什么color=np.median(data['Severity'])无效?

color参数需要指定数据集中的列名,让Plotly能将每个区域(FIPS)对应到该列的具体数值。而你传入的是整个数据集的中位数(单一数值),Plotly无法将这个值匹配到每个区域,因此无法实现预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:00:22