我目前正在尝试创建图形堆栈图,其中的前两个具有颜色条。为了很好地做到这一点,我使用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是我正在努力解决的问题的图片。
如果我可以将第二个稍短一些,或者将第二个稍稍向上移动一点也不是问题。不幸的是,由于我使用了GridSpec(否则就太神奇了),所以我受制于轴的限制。
答案 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)