subplot是如何工作的,subplot(121)和subplot(1,2,1)在MATLAB中有什么区别?

14
我对subplot的工作方式还不太清楚。具体而言,在MATLAB中subplot(121)subplot(1,2,1)之间有什么区别?我尝试搜索了subplot文档,但似乎没有找到我要找的内容。
1个回答

48

简而言之,它们没有区别。 subplot 的工作方式如下:

subplot(m,n,p); %//or
subplot(mnp);
你有三个数字可以用在subplot中。 subplot将多个图形放置在同一个窗口中。您可以将绘图放置在m x n网格中,其中m包含图形中的行数,n包含列数。 p决定了您想要在网格中放置绘图的位置。数字p1递增到m x n,并且绘图从左到右,从上到下放置。
在这种情况下,当您执行subplot(1,2,1)subplot(121)时,您希望有行和列的图像。 最后一个数字p=1表示您希望将绘图放置在最左侧的列中。 当您执行subplot(1,2,2)subplot(122)时,此时p=2,您希望将绘图放置在最右侧的列中。
使用subplot的方法如下:
1.首先确定此窗口内需要有多少行和列的绘图(即mn)。 2.生成一个空的figure窗口。 3.对于每个要创建的绘图...
- 调用subplot并选择您希望绘图出现的正确位置。 - 编写必要的代码,像您为仅占用单个窗口的绘图一样。 - 绘制你的数据
4.重复第3步,直到我们用完subplot位置。
以下是一个说明性示例。 我们创建一个在同一窗口中具有两行三列图的窗口。 如下:
figure;
rng(10); %// Set seed for reproducibility
subplot(2,3,1);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('First plot');
subplot(2,3,2);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Second plot');
subplot(2,3,3);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Third plot');
subplot(2,3,4);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Fourth plot');
subplot(2,3,5);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Fifth plot');
subplot(2,3,6);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Sixth plot');
上述代码的作用是生成随机点集,每个点集由一对x和y组成,每个点集都有100个点,并在整个窗口中的多个位置上绘制它们。请注意,subplot的最后一个参数呈线性增长,而前两个参数保持不变。在开始绘图之前,必须确保知道整个窗口中需要多少个图形。该代码描述的图形如下所示:enter image description here 您还可以为p指定一个向量。但是,如果使用这种方式,则必须以以下方式调用subplot:subplot(m,n,p);如果p是单个数字,则subplot(m,n,p);或subplot(mnp)都可以正常工作。
如果将p指定为向量,则这将使得您绘制的一个图占据同一图形窗口中的多个空间/插槽。例如,如果您执行:subplot(2,3,1:3);,这将采用一个图,并占据您的图的整个第一行。然后,您可以在插槽4、5和6中发出更多的绘图。换句话说:
figure;
rng(10); %// Set seed for reproducibility
subplot(2,3,1:3);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('First plot');
subplot(2,3,4:5);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Second plot');
subplot(2,3,6);
x = rand(100,1);
y = rand(100,1);
plot(x,y,'b.');
title('Third plot');

这张图的样子如下:

enter image description here

如您所见,我们使用subplot(2,3,1:3);在第一行用第一个图占据了第一行。第二个图占据了p=4,p=5的位置,使用了subplot(2,3,4:5);。它占据了第二行的第一列和第二列。最后,我们的最后一个图占据了第二行的第三列,使用了subplot(2,3,6);。请记住,描绘区域从左到右、从上到下,而且p不仅可以是单个数字,还可以是向量。如果您想占据前两行和前两列,则应该使用subplot(2,3,[1 2 4 5]);。现在,如果您想占据整个最右边的列,您可以使用subplot(2,3,[3 6]);,或者如果您只想要最右边列的顶部位置,则可以使用subplot(2,3,3);subplot(233);,然后如果您想处理最后一列和最下面最右边的位置,您可以使用subplot(2,3,6);subplot(236);

最后要确保记住的一件事是,您需要在决定显示图形之前调用subplot一旦完成,切换到下一个位置继续工作

希望这可以帮助你!祝你好运!


12
+1哇。非常棒的详细回答;图片运用得很好。 - Andrew Janke
1
@AndrewJanke - 非常感谢 :) 作为一个 Stack Overflow MATLAB 老手,这意味着很多。我站在 MATLAB 巨人的肩膀上! - rayryeng
@rayryeng 非常感谢!!真的帮了我很多!!但是,我理解你写的95%,因为在subplot文档中,“subplot(111)是上述规则的例外,并且与subplot(1,1,1)的行为不同。出于向后兼容性的原因,它是subplot的特殊情况,不会立即创建一个轴线,(因为太长了,你可以在MATLAB“help subplot”中阅读它)。我不明白它的意思,T_T;;也许有一点区别..我想要一个例子。^^; - user3595632
@user3595632 - 不用客气。如果我对你有所帮助,请考虑接受我的答案。点击我帖子左上方的勾号图标,在上下箭头下面。 - rayryeng
4
“多个插槽”的用法非常酷,但很少使用。+1 - chappjc
显示剩余2条评论

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