簡體   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