Colorbar offsetText(科学基础乘数)从colorbar的顶部到底部移动

时间:2017-05-01 11:19:44

标签: python numpy matplotlib colorbar

我在这里遇到这个'简单'的问题,我的智慧正在失去:

在matplotlib的颜色栏(如图所示)中,我需要将offsetText(基本乘数)从颜色条的顶部移动到底部。

我正在使用的代码是(使用gridspec):

f.add_subplot(ax12)

ax10 = plt.Subplot(f, gs00[1, 0])
cb = plt.colorbar(h3,cax=ax10)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))
cb.ax.yaxis.offsetText.set(size=6)
cb.update_ticks()

ax10.yaxis.set_ticks_position('left')
ax10.tick_params(labelsize=6)
f.add_subplot(ax10)

提前致谢! (顺便说一句,Python版本= 2.7.6,matplotlib版本= 1.3.1 - 升级当前不是一个选项,直到我完成当前项目)

enter image description here

2 个答案:

答案 0 :(得分:2)

嗯......显然,不可能向上或向下移动colorbar的科学基础乘数,只是略微向左或向右移动。

解决方法是隐藏它,只添加(相同)位于底部的自定义文本(在我的情况下):

    cb.ax.yaxis.get_offset_text().set_visible(False)
    cb.ax.text(0.5, -0.1, '1e4', va='bottom', ha='center', size=6)

如果有人有更优雅的解决方案,我很乐意看到它!

答案 1 :(得分:2)

通常无法更改offsetText标签的位置。这仍然是open issue

因此,解决方案可以覆盖yaxis' _update_offset_text_position方法将offsetText定位在yaxis的底部。

import matplotlib.pyplot as plt
import types

def bottom_offset(self, bboxes, bboxes2):
    bottom = self.axes.bbox.ymin
    self.offsetText.set(va="top", ha="left")
    self.offsetText.set_position(
            (0, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))

fig, ax = plt.subplots()
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]])
cb = plt.colorbar(im)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))

def register_bottom_offset(axis, func):
    axis._update_offset_text_position = types.MethodType(func, axis)
register_bottom_offset(cb.ax.yaxis, bottom_offset)

cb.update_ticks()

plt.show()

enter image description here

如果颜色条位于绘图的左侧,则以下情况可能会更好:

self.offsetText.set(va="top", ha="right")
self.offsetText.set_position(
            (1, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))