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

如何在Plotly Choropleth地图中设置自定义分箱与刻度?

解决Plotly Choropleth多数量级数据自定义刻度/分箱问题

问题根源

你当前代码的核心问题是:color参数传入的是log10转换后的数据,但colorbar的tickvals用的是原始数据值,两者不匹配,导致刻度无法正确对应颜色。另外原代码中locations='value'是错误的,locations应传入国家代码(如ISO 3166-1 alpha-3)或国家名称列,否则地图无法正确渲染。

修正方案(连续颜色+自定义对数刻度)

基于log转换后的数据设置colorbar刻度,让刻度文本显示原始数值:

import plotly.express as px
import numpy as np
import pandas as pd

# 处理数据:替换0为NaN,计算log10值
df['log_value'] = np.log10(df['value'].replace(0, np.nan))

# 定义自定义刻度的原始值、显示文本,转换为log10数值用于对应color的刻度
original_ticks = [1E-22, 1E-10, 1E-9, 1E-8, 1E-7, 4.3E-06]
tick_text = ["<1E-10", "1E-10", "1E-9", "1E-8", "1E-7", "4.3E-06"]
log_ticks = np.log10(original_ticks)

fig = px.choropleth(df, 
                    locations='locations',  # 替换为你的国家代码/名称列
                    color='log_value',
                    color_continuous_scale="YlOrRd",
                    range_color=(log_ticks[0], log_ticks[-1])  # 锁定颜色范围
                    )

fig.update_layout(coloraxis_colorbar=dict(
    title="Value",
    tickvals=log_ticks,
    ticktext=tick_text,
    ticks="outside"
))

fig.show()

进阶:自定义分箱(离散颜色)

如果想要实现预期图中的分段式离散颜色,可以先对原始数据做自定义分箱,再用离散颜色映射:

# 自定义分箱区间和标签
bins = [-np.inf, 1E-10, 1E-9, 1E-8, 1E-7, 4.3E-06, np.inf]
labels = ["<1E-10", "1E-10~1E-9", "1E-9~1E-8", "1E-8~1E-7", "1E-7~4.3E-06", ">4.3E-06"]

df['value_bin'] = pd.cut(df['value'].replace(0, np.nan), bins=bins, labels=labels)

fig = px.choropleth(df, 
                    locations='locations',  # 替换为你的国家代码/名称列
                    color='value_bin',
                    color_discrete_sequence=px.colors.sequential.YlOrRd[:len(labels)],
                    category_orders={"value_bin": labels}  # 确保分箱顺序正确
                    )

fig.update_layout(coloraxis_colorbar=dict(
    title="Value"
))

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:08:09