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

如何反转散点图中colorbar的分类变量顺序?

问题:反转散点图颜色条顺序

背景与代码示例

我有一个包含分类变量energylabel的DataFrame,该变量通过pd.cut()基于EP2列生成,代码如下:

>>> df
    costs  EP2
0     0.0  260
1  5866.0  230
2  5755.0   32
3   722.0  -42
4  6588.0  103
>>> bins_energylabel = [-np.inf, 0, 50, 75, 105, 160, 190, 250, 290, 335, 380, np.inf]
>>> labs_energylabel = ['A++++', 'A+++', 'A++', 'A+', 'A', 'B', 'C', 'D', 'E', 'F', 'G']
>>> df['energylabel'] = pd.cut(df['EP2'], bins=bins_energylabel, labels=labs_energylabel)
>>> df
    costs  EP2 energylabel
0     0.0  260           D
1  5866.0  230           C
2  5755.0   32        A+++
3   722.0  -42       A++++
4  6588.0  103          A+

我通过以下代码绘制costs与EP2的散点图,用energylabel对应颜色着色:

ax1 = df.plot.scatter(x='costs', y='EP2', c='energylabel', colormap='Set3', sharex=False)

提问

当前颜色条(colorbar)顶部为G,我希望反转其顺序,让A++++等靠前的类别位于顶部。已知类别顺序为['A++++' < 'A+++' < 'A++' < 'A+' ... 'D' < 'E' < 'F' < 'G'],请问能否直接通过上述绘图代码实现该反转?


解答

不能仅通过原绘图代码的参数直接实现,但可以通过简单的后续代码调整,有两种常用方案:

方案1:直接反转颜色条

绘图后获取颜色条对象并设置反转,这种方式不会改变类别与颜色的对应关系,仅调整颜色条的显示顺序:

ax1 = df.plot.scatter(x='costs', y='EP2', c='energylabel', colormap='Set3', sharex=False)
# 反转颜色条顺序
ax1.collections[0].colorbar.reverse = True

方案2:反转颜色映射并同步标签

如果希望颜色分配也跟着类别顺序反转,可以使用带_r后缀的颜色映射(表示reverse),同时手动调整颜色条标签:

ax1 = df.plot.scatter(x='costs', y='EP2', c='energylabel', colormap='Set3_r', sharex=False)
cbar = ax1.figure.colorbar(ax1.collections[0])
cbar.set_ticklabels(reversed(labs_energylabel))

第一种方案更简洁,适合仅调整颜色条顺序的需求;第二种方案会改变颜色与类别的匹配,适合需要视觉上颜色深浅和类别等级对应反转的场景。


内容的提问来源于stack exchange,提问作者T C Molenaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:55:20