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

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

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

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

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

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

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

2nbm6dog

2nbm6dog1#

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

  1. import matplotlib.pyplot as plt
  2. fig, ax = plt.subplots(2,2)
  3. ax_coords = list(ax[0,0].get_position().bounds)
  4. ax_coords[-1] /= 2
  5. ax[0, 0].set_position(ax_coords)

相关问题