📌  相关文章
📜  Python中的 Matplotlib.axes.Axes.get_position()(1)

📅  最后修改于: 2023-12-03 14:46:33.769000             🧑  作者: Mango

Python中的 Matplotlib.axes.Axes.get_position()

在Matplotlib这个Python数据可视化库中,Matplotlib.axes.Axes.get_position()方法可用于获取子图(subplot)的位置和尺寸信息。这个方法返回的是一个matplotlib.transforms.Bbox对象,其中包含了子图的左下角坐标以及宽度和高度的信息。

用法

get_position(original=False)方法可以接受一个可选参数original,默认值为False,表示返回的是规范化的坐标(normalized coordinates),值域在0到1之间。若original=True,则返回的是原始坐标(原始像素单位)。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [2, 4, 6])

print(ax.get_position())

运行以上代码输出结果为:

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

其中,Bbox就是matplotlib.transforms.Bbox类的实例,包含了四条边的坐标信息。可以通过以下方法获取具体数值:

bbox = ax.get_position()
print('left:', bbox.x0, 'bottom:', bbox.y0, 'right:', bbox.x1, 'top:', bbox.y1)

此外,若想将子图覆盖整个figure,可以通过以下方法实现:

bbox = ax.get_position()
fig.subplots_adjust(left=bbox.x0, bottom=bbox.y0, right=bbox.x1, top=bbox.y1)
返回值

get_position()方法的返回值是一个Bbox对象,其中包含了4个float数值,分别表示子图的左、下、右、上边缘的坐标。

这个返回值可以直接用于fig.subplots_adjust()函数,用于控制绘图的边距、间距和尺寸等。

同时,因为这个方法可以在original参数为False时返回规范化坐标,因此也可以用于计算子图的相对位置等信息。

示例

下面的例子代码中,创建了一个4x4的子图布局,共16个子图,每个子图中随机生成了一些点。然后遍历所有子图,用不同的颜色标出它们的位置和尺寸信息。

import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(4, 4)
colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']
np.random.seed(1234)

for i in range(4):
    for j in range(4):
        x = np.random.normal(size=50)
        y = np.random.normal(size=50)

        axs[i, j].scatter(x, y, c=np.random.choice(colors))
        bbox = axs[i, j].get_position()
        axs[i, j].text(0.5, 0.5, f'({i}, {j})\n{bbox.x0:.2f}, {bbox.y0:.2f}\n{bbox.x1:.2f}, {bbox.y1:.2f}',
                       ha='center', va='center', transform=axs[i, j].transAxes)
        
plt.show()

运行以上代码,可得到以下图片:

subplot-positions

其中每个子图中,红色点表示子图左下角,黑色否表示子图右上角,同时在子图中央的位置打印了这个子图的位置和bbox信息。