You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何调整Plotly含离群值数据的颜色图例,重点展示0-2k区间?

解决Plotly中含离群值数据的色标图例展示问题

我完全懂你遇到的困扰——几个高值离群点直接把色标范围拉到了10k级别,导致0-2k这个大部分数据所在的区间,颜色差异被压缩得几乎没法分辨。咱们可以通过手动限定色标范围+自定义图例刻度的方式,既突出核心数据区间的细节,又合理处理离群值的展示。

核心思路

  • 把色标的有效范围聚焦在0-2000(也就是你关注的核心区间),让这个区间内的颜色有足够的梯度变化
  • 所有超过2000的离群值统一映射到色标的最高阶颜色
  • 手动设置图例刻度,明确标注出">2000"的离群区间,避免误导

修改后的完整代码

import numpy as np
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
from plotly.graph_objs import *
init_notebook_mode()

x = np.random.randn(100,1) + 3
y = np.random.randn(100,1) + 10
x = np.reshape(x, 100)
y = np.reshape(y, 100)
color = np.random.randint(0,1000, [100])
color[[1,3,5]] = color[[1,3,5]] + 10000 # 创建颜色离群值

trace = Scatter(
    x = x,
    y = y,
    mode = 'markers',
    marker=dict(
        color = color,
        showscale=True,
        # 限定色标有效范围为0-2000,超过的都用最高色
        cmin=0,
        cmax=2000,
        # 优化0-2000区间的颜色梯度,让差异更明显
        colorscale = [[0, 'rgb(166,206,227, 0.5)'],
                     [0.2, 'rgb(31,120,180,0.5)'],
                     [0.4, 'rgb(178,223,138,0.5)'],
                     [0.6, 'rgb(51,160,44,0.5)'],
                     [0.8, 'rgb(251,154,153,0.5)'],
                     [1, 'rgb(227,26,28,0.5)']],
        # 自定义颜色条的刻度和文本
        colorbar=dict(
            tickvals=[0, 500, 1000, 1500, 2000, 10000],
            ticktext=["0", "500", "1000", "1500", "2000", ">2000"],
            title="Value"
        )
    )
)
fig = Figure(data=[trace])
iplot(fig)

代码关键调整说明

  • cmincmax:强制色标只对0-2000范围内的值进行梯度映射,所有超过2000的点都会使用色标最后一个颜色
  • 优化后的colorscale:把原来集中在0.2以内的颜色梯度均匀分布到0-1区间,让0-2000内的颜色差异更清晰
  • colorbartickvalsticktext:手动设置刻度位置和对应文本,既展示0-2000的细分区间,又用">2000"明确标注离群值的范围

这样调整后,你的颜色图例就会和你期望的效果一致:0-2000区间的颜色差异清晰可见,离群值也有明确的标注,不会再被大数值干扰核心数据的可视化效果。

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

火山引擎 最新活动