matplotlib 使用AxesGrid时出现意外结果

kr98yfug  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(96)

这个代码

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid

mat0 = [[1, 2], [3, 4], [5, 6], [7, 8]] # 4 rows × 2 columns
mat1 = [[-2, 0, 2, 4], [0, 2, 4, 6]]    # 2 rows × 4 columns

fig = plt.figure(figsize=(9, 3))
grid = AxesGrid(fig, 111, nrows_ncols=(1,2),
                axes_pad=0.15,
                cbar_size="6%", cbar_location="right", cbar_mode="single")
for ax, mat in zip(grid.axes_all, (mat0, mat1)): im = ax.imshow(mat)
grid.cbar_axes[0].colorbar(im)

plt.figure()
plt.imshow(mat0)
plt.colorbar()

plt.show()

产生两个图形

在第一幅图中,我希望看到左边有一个高高的矩形,就像第二幅图一样。
当然,我不明白AxesGrid到底发生了什么。
我怎样才能让这两个图像并排,而不把高的那个截断?
一张照片值得1000字吗?

r1zhe5dt

r1zhe5dt1#

如果你处理的是不同尺寸的图像,在保持长宽比的同时以相同的高度并排显示它们可能会很棘手。一个更简单的替代方案,对我来说是一个更优雅的解决方案,可能只是使用子图和共享颜色栏。你可以这样做:

import matplotlib.pyplot as plt
import numpy as np

mat0 = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) # 4 rows × 2 columns
mat1 = np.array([[-2, 0, 2, 4], [0, 2, 4, 6]])    # 2 rows × 4 columns

fig, axs = plt.subplots(1, 2, figsize=(9, 3))

cax = axs[0].imshow(mat0)
axs[1].imshow(mat1)

fig.colorbar(cax, ax=axs.ravel().tolist(), shrink=0.5)

plt.show()

在此脚本中,subplots创建一个1x2轴网格。使用imshow在这些轴上显示图像。颜色条在fig.colorbar的帮助下在子图之间共享。shrink参数用于调整颜色条的大小。您可能需要调整figsize参数,以更好地适应您的数据和显示大小。
结果如下:

希望这能帮上忙。

相关问题