繁体   English   中英

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

[英]matplotlib change colorbar height within own axes

我目前正在尝试创建图形堆栈图,其中的前两个具有颜色条。 为了很好地做到这一点,我使用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')

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

谢谢!

编辑: 这是我正在努力解决的问题的图像。

在此处输入图片说明

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

我认为没有任何方法可以让cax不能填满整个cax 但是,在绘制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)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM