matplotlib 如何使用Axes对象(不带gs)更改子图的大小

xwbd5t1u  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(116)

一直在尝试如何在Matplotlib中使用Axes对象时更改子图的大小。

fig=plt.figure()
ax=np.empty((2,2,),dtype=object)
ax[0][0]=fig.add_subplot(2,2,1)
ax[0][1]=fig.add_subplot(2,2,2)
ax[1][0]=fig.add_subplot(2,2,3)
ax[1][1]=fig.add_subplot(2,2,4)

现在假设你想改变其中一个子图的大小。我见过你使用gs来做这件事的例子,但我很好奇是否有另一个不使用gs的方法。看起来你可以使用get_position和set_position?

old_position=ax[0][0].get_position()
old_position[-1]=old_position[-1]/2
ax[0][0].set_position(old_position)

这里的想法只是将左上角的图压缩一半,但是返回的position对象是一个不可下标的BBox对象,我看不到一种“下标它”的方法,所以旧的位置可以被改变,一个新的位置可以被设置。
如何使用get/set位置更改其中一个子图的大小?

2nbm6dog

2nbm6dog1#

根据this answer,你可以使用Axes.get_position().bounds获取可索引的坐标。然后你可以从结果中更新坐标,并使用Axes.set_position()

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2,2)
ax_coords = list(ax[0,0].get_position().bounds)
ax_coords[-1] /= 2
ax[0, 0].set_position(ax_coords)

相关问题