Matplotlib:matshow 列下方颜色条的宽度

问题描述 投票:0回答:1

我有一列 matshow 图像,在底部图像下方,我想放置一个宽度与图像相同的颜色条。

我尝试遵循 Set Matplotlib colorbar size to match graph 的建议,但实现此操作会缩小底部图:

MWE:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, axes = plt.subplots(nrows=2, ncols=1, dpi=200)

for ax in axes.flat:
    im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)
    
divider = make_axes_locatable(axes[1])
cax = divider.append_axes("bottom", size="5%", pad=0.25)    

fig.colorbar(im, orientation='horizontal', cax=cax)

plt.show()

Bottom plot shrinked

matplotlib colorbar
1个回答
0
投票

使用

divider
可以从
ax
中窃取空间(此处的高度)。 由于使用了
matshow
ax
的长宽比应该为 1,因此它的宽度也会缩小。

一种解决方案是独立为颜色条创建

cax
,然后强制其具有
ax
的宽度:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox

fig, (*axes, cax) = plt.subplots(3, 1, gridspec_kw={"height_ratios": [1, 1, 0.05]})

for ax in axes:
    im = ax.imshow(np.random.random((10, 10)), vmin=0, vmax=1)

fig.colorbar(im, orientation="horizontal", cax=cax)

(xmin, _), (xmax, _) = axes[0].get_position().get_points()
(_, ymin), (_, ymax) = cax.get_position().get_points()
cax.set_position(Bbox([[xmin, ymin], [xmax, ymax]]))

plt.show()

cax good width

© www.soinside.com 2019 - 2024. All rights reserved.