我在这里由于这个“简单”问题而失去了智慧:
在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-在我完成当前项目之前,当前无法升级)
最佳答案
通常,无法更改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()
如果颜色条位于图的左侧,则以下外观可能会更好:
self.offsetText.set(va="top", ha="right")
self.offsetText.set_position(
(1, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))