您可以采用多种方式合并绘图。利用子图,可在同一坐标区中合并多个图,或在一个图窗中创建多个坐标区。
1.在同一坐标区中合并绘图
默认情况下,新图将清除现有图,并重置标题等坐标区属性。但是,您可以使用 hold on
命令在同一坐标区中合并多个图。例如,绘制两条直线和一个散点图,然后将 hold 状态重置为 off。
x = linspace(0,10,50);
y1 = sin(x);
plot(x,y1)
title('Combine Plots')
hold on
y2 = sin(x/2);
plot(x,y2)
y3 = 2*sin(x);
scatter(x,y3)
hold off
启用 hold 状态后,新图不会清除现有图,也不会重置标题或轴标签等坐标区属性。新图将根据坐标区的 ColorOrder
和 LineStyleOrder
属性循环使用颜色和线型。坐标区范围和刻度值可能会进行调整以适应新数据。
2.使用子图在图窗中创建多个坐标区
使用 subplot
函数在一个图窗中创建多个坐标区,该函数可将图窗划分为若干个子图网格。subplot
的前两个输入表示每行和每列的子图数。第三个输入指定哪个子图处于活动状态。MATLAB 按行对子图位置编号。图形函数(例如 plot
和 title
)的作用目标是活动子图。
例如,在一个图窗窗口内的 2×1 网格中创建两个堆叠的子图。为每个子图添加标题。
subplot(2,1,1);
x = linspace(0,10,50);
y1 = sin(x);
plot(x,y1)
title('Subplot 1')
subplot(2,1,2);
y2 = rand(50,1);
scatter(x,y2)
title('Subplot 2')
3.创建跨多个网格位置的子图
要创建跨多个网格位置的子图,请以位置数组的形式指定 subplot
函数的第三个输入参数。例如,创建一个 2×2 网格子图。在图窗的上半部分创建两个子图,在整个下半部分创建一个子图。
figure
subplot(2,2,1);
x = linspace(0,10,50);
y1 = sin(x);
plot(x,y1)
subplot(2,2,2);
y2 = rand(50,1);
scatter(x,y2)
subplot(2,2,[3 4]);
y3 = rand(50,1);
plot(x,y2)
4.修改子图外观
通过设置底层 Axes
对象的属性,可以修改子图外观。使用 subplot
函数的输出参数访问 Axes
对象。还可以使用 Axes
对象作为图形函数的第一个输入参数,以确保该函数作用于正确的子图。
例如,创建两个子图,并将 Axes
对象赋给变量 ax1
和 ax2
。更改第一个子图的坐标区字体大小和 x 轴颜色。为第二个子图添加网格线。
figure
ax1 = subplot(2,1,1);
x = linspace(0,10,50);
y1 = sin(x);
plot(ax1,x,y1)
title(ax1,'Subplot 1')
ax1.FontSize = 14;
ax1.XColor = 'red';
ax2 = subplot(2,1,2);
y2 = rand(50,1);
scatter(ax2,x,y2)
title(ax2,'Subplot 2')
grid(ax2,'on')
5.为子图网格添加总标题
在创建包含子图的图窗时,您可能想添加一个适用于所有子图的标题。从 R2018b 开始,您可以使用 sgtitle
函数为子图网格添加一个总标题。
subplot(2,1,1);
x = linspace(0,10,50);
y1 = sin(x);
plot(x,y1)
title('Subplot 1')
subplot(2,1,2);
y2 = rand(50,1);
scatter(x,y2)
title('Subplot 2')
sgtitle('My Subplot Grid Title')