matplotlib在自己的轴内更改颜色条的高度

时间:2018-11-22 10:49:19

标签: python matplotlib colorbar

我目前正在尝试创建图形堆栈图,其中的前两个具有颜色条。为了很好地做到这一点,我使用GridSpec定义了两列,第二列要细得多,专门用于颜色条(或其他图例之类的不合规格的东西)。

grids  = gs.GridSpec(5, 2, width_ratios=[1, 0.01])
ax1    = fig.add_subplot(grids[0, 0])
cax1   = fig.add_subplot(grids[0, 1])

问题在于,对于这前两个图,由于我的图之间的水平空间为零,因此我的颜色栏的刻度标签略有重叠。

我知道有多种方法可以控制颜色条的高度,但是它们似乎依靠颜色条通过从父轴借用空间使其成为自己的轴。我想知道当您使用cax kwarg时是否有任何方法可以控制彩条占用多少空间(或具体来说是高度)

fig.colorbar(im1, cax=cax1, extend='max')

或默认(不变地)占用指定给它的轴的整个高度。

谢谢!

编辑:Here's是我正在努力解决的问题的图片。

enter image description here

如果我可以将第二个稍短一些,或者将第二个稍稍向上移动一点也不是问题。不幸的是,由于我使用了GridSpec(否则就太神奇了),所以我受制于轴的限制。

1 个答案:

答案 0 :(得分:1)

我认为没有任何方法可以让颜色栏不填满整个cax。但是,在绘制彩条之前(或之后)缩小cax的大小相当简单。

我写了这个小函数:

def shrink_cbar(ax, shrink=0.9):
    b = ax.get_position()
    new_h = b.height*shrink
    pad = (b.height-new_h)/2.
    new_y0 = b.y0 + pad
    new_y1 = b.y1 - pad
    b.y0 = new_y0
    b.y1 = new_y1
    ax.set_position(b)

可以这样使用:

fig = plt.figure()
grids  = gs.GridSpec(2, 2, width_ratios=[1, 0.01])
ax1    = fig.add_subplot(grids[0, 0])
cax1   = fig.add_subplot(grids[0, 1])

ax2    = fig.add_subplot(grids[1, 0])
cax2   = fig.add_subplot(grids[1, 1])
shrink_cbar(cax2, 0.75)

enter image description here