如何反转散点图中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
相关产品推荐
相关产品推荐

