我想在一个图中有三个图。图的子图布局应该是2乘2,其中第一个图应该占据前两个子图单元格(即整个第一行图单元格),其他图应该位于第一个图下面的单元格3和4中。
我知道MATLAB通过使用subplot
命令来实现这一点,如下所示:
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
在pyplot中是否也可以让一个轴占据多个子图?pyplot.subplot
的文档串中没有提到这一点。
谁有简单的解决办法?
我想在一个图中有三个图。图的子图布局应该是2乘2,其中第一个图应该占据前两个子图单元格(即整个第一行图单元格),其他图应该位于第一个图下面的单元格3和4中。
我知道MATLAB通过使用subplot
命令来实现这一点,如下所示:
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
在pyplot中是否也可以让一个轴占据多个子图?pyplot.subplot
的文档串中没有提到这一点。
谁有简单的解决办法?
7条答案
按热度按时间weylhg0b1#
您可以简单地执行以下操作:
也就是说,第一个图实际上是上半部分的图(图中只划分为2x1= 2个单元格),下面两个较小的图是在2x2=4个单元格的网格中完成的。
subplot()
的第三个参数是图在网格中的位置(按照英语阅读方向,单元格1位于左上角):例如,在第二子图(subplot(2, 2, 3)
)中,轴将到达2 × 2矩阵的第三部分,即到达左下角。xpcnnkqh2#
Using Gridspec to make multi-column/row subplot layouts显示了使用
GridSpec
执行此操作的方法。pinkon5k3#
要使多个子绘图区占用一个轴,只需执行以下操作:
另一种方法是
pod7payv4#
对于更细粒度的控制,您可能希望使用
matplotlib.pyplot
的subplot2grid
模块。http://matplotlib.org/users/gridspec.html
e37o9pze5#
一个更现代的答案是:最简单的可能是使用subplots_mosaic:https://matplotlib.org/stable/tutorials/provisional/mosaic.html
cvxl0en26#
matplotlib中有三个主要选项可用于在图形中绘制单独的图:
subplot
:访问axes数组并添加子绘图gridspec
:控制基础图形的几何性质(demo)subplots
:将前两个封装在一个方便的API中(demo)到目前为止,这些帖子已经讨论了前两个选项,但他们还没有提到第三个,这是一个更现代的方法,基于前两个选项。请参阅特定的文档 * 使用子情节和GridSpec* 组合两个子情节。
更新
一个更好的改进可能是@ JodyKlymak的帖子中提到的临时
subplot_mosaic
方法。它使用一种结构化的、可视化的方法来绘制子情节,而不是混乱的数组索引。然而,它仍然基于上面提到的后一种方法。xzv2uavs7#
我能想到两个更灵活的解决方案。
1.最灵活的方式:使用
subplot_mosaic
。效果:
1.使用
subplots
的gridspec_kw
。虽然当不同的行需要不同的宽度比时也不方便。效果:
其他答案的
subplot
方法有点死板。例如,你不能轻松地创建宽度比为1:2和2:1的两行。但是,当你需要覆盖subplots
的一些布局时,它会有所帮助。