python-3.x 为通过AxesDivider.append_axes创建的轴恢复了不正确的边界框?

omvjsjqw  于 2023-05-08  发布在  Python
关注(0)|答案(1)|浏览(109)

使用matplotlib(3.5.0版),我试图获取使用AxesDivider.append_axes方法创建的Axes示例的边界框。即,创建该新轴以保持主轴图像的颜色条。因此,我有下面的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable

fig, ax1 = plt.subplots(1, 1)

im1 = ax1.imshow([[1, 2], [3, 4]])
ax1_divider = make_axes_locatable(ax1)
# Add an Axes to the right of the main Axes.
cax1 = ax1_divider.append_axes("right", size="10%", pad="0%")
cb1 = fig.colorbar(im1, cax=cax1)

plt.show()

这将创建下图,显示主轴及其颜色条:

现在我希望在显示坐标中找到colorbar轴的边界框(或者甚至是数字分数,我很容易!),所以我使用Axes.get_position方法,即:

print(ax1.get_position())
print(cax1.get_position())

这将产生以下输出:

Bbox(x0=0.125, y0=0.125, x1=0.9, y1=0.88)
Bbox(x0=0.125, y0=0.125, x1=0.9, y1=0.88)

正如您所看到的,与直觉相反,colorbar轴的边界框(cax1)显然与主轴的边界框(ax1)完全相同。
我的问题是,如何恢复colorbar轴的实际边界框(cax1)?
我期待cax1的正确边界框(粗略地说,如果我手工计算正确的话):

Bbox(x0=0.8225, y0=0.125, x1=0.9, y1=0.88)
e5njpo68

e5njpo681#

你使用的是哪个版本的matplotlib?在我这边(matplotlib.__version__ = 3.7.1),Bbox es返回的结果似乎是正确的(并且使用了另一种输出格式):

In [3]: ax1.get_position()
Out[3]: Bbox([[0.19487500000000002, 0.11000000000000004], [0.7723749999999999, 0.8799999999999999]])

In [4]: cax1.get_position()
Out[4]: Bbox([[0.7723749999999999, 0.10999999999999999], [0.830125, 0.88]])

相关问题