在数据可视化中,多个子图的使用可以帮助我们更好地展示数据,并且使得数据呈现更加直观。 Matlab提供了很方便的subplot函数,允许我们在单个绘图窗口中创建并依次绘制多个子图。 本文将介绍如何使用subplot并定制不同位置和大小的子图。
一、创建subplot
使用subplot函数创建多个子图是非常简单的。 该函数接受三个整数参数:行数,列数和子图编号。 子图编号是从左到右从上往下编号的,并从1开始。参数表示要画的图在第几行第几列,例如(2,3,1)表示第一张图位于第一行第一列,(2,3,2)表示第二张图位于第一行第二列,以此类推。
在Matlab中,我们可以通过如下代码创建一个2x2的子图组:
```matlab
subplot(2,2,1)
plot(rand(10,1))
subplot(2,2,2)
plot(rand(50,1))
subplot(2,2,3)
plot(rand(100,1))
subplot(2,2,4)
plot(rand(200,1))
```
上述代码将创建四个子图。我们将用plot函数绘制类似于随机数据的图形,演示如下:
![image-20211101220145700](https://raw.githubusercontent.com/nickmancol/Markdownpic/main/image-20211101220145700.png)
二、定制子图大小和位置
有时,我们需要更灵活地控制子图的位置和大小。 这时,我们可以使用Matlab的覆盖绘图,并用axes函数将子图放在自定义位置和大小的坐标系中。 以下是一些可以让我们更好地理解这种技术的示例代码。
**例一:调整subplot大小**
我们可以使用subplot函数直接创建多个更大或更小的相同大小的子图。例如,如下代码将创建4个大小不同的相同子图。
```matlab
subplot(2,2,1),imshow('image1.jpg');
subplot(2,2,2),imshow('image2.jpg');
subplot(2,2,3),imshow('image3.jpg');
subplot(2,2,4),imshow('image4.jpg');
```
![image-20211101220839137](https://raw.githubusercontent.com/nickmancol/Markdownpic/main/image-20211101220839137.png)
可以看到,每个子图都被相等地重叠在得到的图形上。 Matlab允许我们通过改变子图的大小和位置使它们不重叠。
**例二:改变相邻子图大小**
我们还可以设置相邻子图的不同大小。我们可以使用subplot和axes函数来实现这一点。下面是一个简单的示例,其中第二个和第三个子图比其他三个子图要小。其代码如下:
```matlab
%第一步创建5张子图
subplot(2, 3, 1), imshow('image1.jpg');
subplot(2, 3, 2), imshow('image2.jpg');
subplot(2, 3, 3), imshow('image3.jpg');
subplot(2, 3, 4), imshow('image4.jpg');
subplot(2, 3, 5), imshow('image5.jpg');
%第二步设置子图大小
ax1 = subplot(2,3,2);
ax2 = subplot(2,3,3);
set(ax1, 'Position',[0.35 0.6 0.2 0.2])
set(ax2, 'Position',[0.6 0.6 0.2 0.2])
```
![image-20211101221408165](https://raw.githubusercontent.com/nickmancol/Markdownpic/main/image-20211101221408165.png)
如上图所示,第2和3个图被调整为相对较小的大小,因此它们可以成为右侧较大图的左上角和右上角。
**例三:设置所有子图的不同大小和位置**
当然,我们还可以自由地设置不同大的、不同位置的子图指定subplot位置。通过subplot,我们可以将图形分割成几个区域,并通过axes在这些不同的区域上绘图。在下面的代码示例中,我们将创建4个子图,它们将占据以0.15为左侧边距、0.53为底部位置、0.28为宽度、0.45为高度的不同矩形。代码如下:
```matlab
h1 = subplot('Position',[0.15 0.53 0.28 0.45]);
plot(rand(100,1))
h2 = subplot('Position',[0.5 0.53 0.28 0.45]);
plot(rand(100,1))
h3 = subplot('Position',[0.15 0.05 0.28 0.45]);
plot(rand(100,1))
h4 = subplot('Position',[0.5 0.05 0.28 0.45]);
plot(rand(100,1))
```
![image-20211101222025447](https://raw.githubusercontent.com/nickmancol/Markdownpic/main/image-20211101222025447.png)
我们可以看到,在这个例子中,我们可以自由设置每个子图的大小和位置,并创建一个4个子图的区域。
总结:
Matlab的subplot函数是一个非常简单而又有用的工具,可以帮助我们在单个绘图窗口中创建多个子图。 使用subplot,我们可以轻松地构建和可视化数据,并在同一绘图中比较多个数据集。 除了使用了subplot之外,我们还介绍了如何使用覆盖绘图和axes函数,以更精细的方式定制多幅子图的大小和位置。 在使用subplot时,我们应该牢记,我们可以改变任何子图的大小和位置,从而获得最大的数据可视化效果。