Matplotlib的Figure和Axes解释

6

我对matplotlib非常陌生,但我知道它可以非常强大。我已经阅读了很多教程和示例,但要理解matplotlib的Figure和Axes如何工作真的很麻烦。我正在使用附加的图例说明我想要理解的内容。enter image description here

我知道如何创建一个指定大小(英寸)的figure实例。然而,困扰我的是如何创建子图,然后在每个子图中创建轴,相对坐标为(bottom=0,left=0,top=1,right=1),如上所示。 例如,我想创建一个“父”绘图区域(6in,10in)。然后,我想创建两个子绘图区域,每个区域大小为(3in,3in),距离顶部1in,两个垂直子绘图区域之间的距离为2in,并距离底部1in。然后,左侧和右侧各有1in的空间。同时,我希望能够获取相对于主绘图区域的子绘图区域的坐标。 然后,在第一个子绘图区域内,我想创建2个轴实例,轴1的坐标相对于子绘图区域1为(0.1,0.7,0.7,0.2),轴2为(0.1,0.2,0.7,0.5)。然后,当然我希望能够在这些轴上绘制,例如,ax1.plot()....
如果您可以提供一个样本代码来实现这一点,那么我就可以学习它。非常感谢您的帮助!


一个subplot和一个Axes对象实际上是相同的东西。在matplotlib中,没有真正意义上的“subplot”,就像你所描述的那样。你可以使用gridspec创建三个Axes对象,而不需要将它们放在你的“subplots”中。 - tmdavison
那么,为什么 matplotlib 有两个不同的类 Axessubplot,当它们是同样的东西吗? - user3578925
fig.add_subplot 返回一个 Axes 实例。subplot 不是一个类,而是一个返回 Axes 的函数。 - tmdavison
1
嗨@tom,那么fig.add_subplotfig.add_axes之间有什么区别呢? - user3578925
太多内容无法在评论中写出,因此我已经添加了一个带有一些详细信息的答案。 - tmdavison
1个回答

6
一个subplot和一个Axes对象实际上是同一个东西。在matplotlib中,没有你描述的“subplot”。您可以使用gridspec创建三个Axes对象,而无需将它们放入您的“subplots”中。
有几种不同的方法可以在图中创建Axes实例。 fig.add_axes将在给定位置创建一个Axes实例(您需要提供[left,bottom,width,height]作为图形坐标(即0,0是左下角,1,1是右上角))。 fig.add_subplot也将创建一个Axes实例。在这种情况下,您不提供要创建的矩形,而是提供要创建子图的行数和列数,然后提供plot_number,其中plot_number从1开始,首先逐行增加,并最多为nrows*ncols
例如,在2行2列的网格中创建左上角的Axes,您可以执行以下操作:
fig.add_subplot(2,2,1)

或者使用缩写
fig.add_subplot(221)

除此之外,还有一些更加可定制的创建 Axes 的方法,例如gridspecsubplot2grid,它们可以轻松地创建不同形状和大小的多个子图。


@ Tom,非常感谢你。你的帮助真的很有帮助,因为我无法从matplotlib文档中理解所有内容。我很感激! - user3578925
@tom 假设您已经生成了多个轴,想要将它们添加到图形实例中。有没有什么方法可以做到这一点? - user7345804
@MPath 我想这取决于你是如何创建它们的,等等。最好提出一个新问题询问,而不是我试图在不同的问题的评论中解释。 - tmdavison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接