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

Plotly美国地图离散图例绘制及数值分箱函数优化咨询

解决方案

一、优化分箱逻辑

你原有的分箱函数存在几个问题:列名和DataFrame不匹配(用了GDP但实际列是Value)、条件逻辑矛盾(比如>20且<10永远不成立)、NA值判断错误(DataFrame里的NA是缺失值,不是字符串"NA")。用Pandas内置的pd.cut()可以更高效简洁地实现按5区间分箱:

import pandas as pd

# 先把字符串"NA"转为Pandas可识别的缺失值NaN
df['Value'] = pd.to_numeric(df['Value'], errors='coerce')

# 定义分箱区间(按每5划分,可根据实际数据范围调整)
bins = [-float('inf'), 0, 5, 10, 15, 20, float('inf')]
# 对应区间的标签
labels = ['≤0', '0-5', '5-10', '10-15', '15-20', '>20']

# 执行分箱,自动处理边界,同时给NA值单独添加类别
df['Value_Bucket'] = pd.cut(df['Value'], bins=bins, labels=labels, include_lowest=True)
df['Value_Bucket'] = df['Value_Bucket'].cat.add_categories(['NA']).fillna('NA')

这种方法的优势:不用写冗余的if-else判断,Pandas内置函数性能更优,区间和标签可统一调整,还能自动处理缺失值。

二、修正Plotly地图绘制代码

原绘图代码混用了连续颜色和离散颜色的参数,且没有关联分箱后的列。以下是满足需求的修正版本:

import plotly.express as px

# 定义离散颜色映射,NA值设为黑色
color_map = {
    '≤0': 'rgb(240,240,240)',
    '0-5': 'rgb(13,136,198)',
    '5-10': 'rgb(191,247,202)',
    '10-15': 'rgb(100,200,100)',
    '15-20': 'rgb(4,145,32)',
    '>20': 'rgb(100,0,0)',
    'NA': 'black'
}

fig = px.choropleth(df, 
                    geojson=counties, 
                    locations='Country',  # 确保该列和geojson中的匹配字段一致(比如州名/州缩写)
                    color='Value_Bucket',  # 用分箱后的列做颜色映射
                    color_discrete_map=color_map,
                    category_orders={
                        'Value_Bucket': ['≤0', '0-5', '5-10', '10-15', '15-20', '>20', 'NA']
                    },
                    scope="usa",
                    hover_name='Country',
                    hover_data={'Value': True, 'Value_Bucket': False}  # hover时显示原始数值,隐藏分箱标签
                   )

fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

关键调整点:

  • 用分箱后的Value_Bucket作为颜色字段,实现离散图例
  • color_discrete_map改用字典格式,每个分箱类别对应指定颜色,NA值设为黑色
  • 移除连续颜色相关参数(color_continuous_midpoint、range_color)
  • 通过category_orders指定图例的显示顺序,确保区间逻辑连贯

三、注意事项

  • 确保geojson的匹配字段和DataFrame的Country列一致:如果geojson用的是美国州缩写,需要把DataFrame里的州全称转为缩写,反之亦然
  • 分箱区间bins可以根据实际数据的取值范围灵活调整(比如如果没有负数,可从0开始)
  • 颜色方案可根据可视化需求自定义,建议保持区间颜色有渐变或区分度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:25:16