我对 matplotlib 真的很陌生,尽管我知道它可以非常强大。
我一直在阅读大量的教程和示例,要了解 matplotlib 的 Figure 和 Axes 的工作原理真的很麻烦。我正在用附图说明我试图理解的内容。
我知道如何以英寸为单位创建特定大小的图形实例。然而,困扰我的是如何创建子图,然后在每个子图中创建轴,如图所示具有相对坐标(底部 = 0,左侧 = 0,顶部 = 1,右侧 = 1)。
所以,例如我想创建一个“父”绘图区(比如(6in,10in))。然后,我想创建两个子图区域,每个区域的大小为 (3in,3in),距顶部 1in 空间,两个垂直子图区域之间 2in 空间,距底部 1in。然后,左边的 1in 空间和 write 的 2in 空间。同时,我希望能够获得子情节区域相对于主情节区域的坐标。
然后,在第一个子图区域内,我想创建 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 中所描述的那样,并没有真正的“子图”。您可以创建您的三个 Axes
对象使用 gridspec
无需将它们放在您的“子图”中。
有几种不同的创建方式 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)
或速记
fig.add_subplot(221)
有一些更可定制的方式来创建
Axes
同样,例如 gridspec
和 subplot2grid
这允许轻松创建许多不同形状和大小的子图。
关于Matplotlib 的 Figure 和 Axes 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36040605/