Matplotlib 的 Figure and Axes 解释

Matplotlib's Figure and Axes explanation

我对 matplotlib 真的很陌生,尽管我知道它可能非常强大。 我一直在阅读大量教程和示例,要理解 matplotlib 的图形和轴是如何工作的真的很麻烦。我正在用附图说明我想理解的内容。

我知道如何创建以英寸为单位的特定尺寸的图形实例。然而,令我困扰的是如何在每个子图中创建子图,然后使用相对坐标(底部=0、左侧=0、顶部=1、右侧=1)创建轴,如图所示。 因此,例如我想创建一个 "parent" 绘图区域(例如(6in,10in))。然后,我想创建两个子图区域,每个子图区域的大小为 (3in,3in),顶部为 1in space,两个垂直子图区域之间为 2in space,底部为 1in。然后,左边的 1in space 和写入的 2in space。同时,我希望能够获得子图区域相对于主图区域的坐标。 然后,在第一个子图区域内,我想创建 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".

有几种不同的方法可以在您的图中创建 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 列的网格中创建左上角的轴,您可以执行以下操作:

fig.add_subplot(2,2,1)

或shorthand

fig.add_subplot(221)

还有一些更可定制的方法来创建 Axes,例如 gridspec and subplot2grid 可以轻松创建许多不同形状和大小的子图。