matplotlib colorbar和imshow与gridspec的问题

vcirk6k6  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(219)

我想在一个图上绘制2 imshow,但我只希望右边的子图在其图的底部有colorbar。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

cm = 1/2.54
fig = plt.figure()
fig.set_size_inches(21*cm,29.7*cm)
gs = GridSpec(1,2,figure=fig)

data1 = np.random.rand(100,1000)
data2 = np.random.rand(100,1000)

ax_left = fig.add_subplot(gs[:,0])
img_left = ax_left.imshow(data1, aspect='auto')

ax_right = fig.add_subplot(gs[:,1])
img_right = ax_right.imshow(data2, aspect='auto')

fig.colorbar(img_right,ax = [ax_right], location='bottom')

plt.show()

正如你所看到的,2个imshow的大小不一样(我想是因为colorbar的原因)。你有没有什么想法可以让右边的图和左边的图有相同的高度(并保留右边imshow的colorbar)。

dwthyt8l

dwthyt8l1#

一种方法是在网格中添加第二行,并在右下角的网格中使用cax作为kwarg绘制颜色条:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

cm = 1/2.54
fig = plt.figure()
fig.set_size_inches(21*cm,29.7*cm)
gs = GridSpec(2,2,figure=fig, hspace=0.1, height_ratios=[20, 1]) # adjust hspace and height_ratios to your liking

data1 = np.random.rand(100,1000)
data2 = np.random.rand(100,1000)

ax_left = fig.add_subplot(gs[0,0])
img_left = ax_left.imshow(data1, aspect='auto')

ax_right = fig.add_subplot(gs[0,1])
img_right = ax_right.imshow(data2, aspect='auto')

ax_cb = fig.add_subplot(gs[1,1])
fig.colorbar(img_right, cax=ax_cb, orientation='horizontal')

plt.show()

输出:

当您使用colorbar时,图形的高度与没有colorbar的相同图形不同,因为mpl使colorbar和图形适合同一子图。

相关问题