MATLAB学习文档(二十四)
参考资料:MATLAB 教程新手入门篇——数学建模清风主讲
目录
9.1.7 图形的组成元素
9.2二维平面上的线图(plot)及通用绘图操作
9.2.1 使用 plot 函数绘制线图
9.2.1.1 plot 函数的基础用法
向量和矩阵数据
表数据
其他选项
参数说明
LineSpec 说明
举例
注意事项
9.2.1.2 plot 函数的名称 - 值参
使用示例
注意事项
更多名称-值参数
9.2.2 hold on/hold off:同一个坐标区中绘制多个图形
功能概述
详细语法与参数说明
核心要点
举例说明
示例 1:基础叠加绘图
示例 2:解决名称-值参数无法分别设置的问题
总结
9.2.3 使用 legend 函数添加图例
功能概述
详细语法与参数说明
legend 函数的语法支持多种调用方式
'Location' 参数的可选值
举例说明
示例 1:基础用法与位置调整
示例 2:使用句柄控制图例内容
总结
9.2.4 使用 text 函数在图形中添加文本
功能概述
详细语法与参数说明
支持丰富的名称-值参数来控制文本的外观。
常用名称-值参数
核心要点
举例说明
示例 1:标记数据点
示例 2:添加数学公式
总结
9.1.7 图形的组成元素
9.2二维平面上的线图(plot)及通用绘图操作
9.2.1 使用 plot 函数绘制线图
9.2.1.1 plot 函数的基础用法
官网截屏:
向量和矩阵数据
- plot(X,Y) 创建 Y 中数据对 X 中对应值的二维线图。
- 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。
- 要在同一组坐标区上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。
- plot(X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。
- plot(X1,Y1,...,Xn,Yn) 在同一组坐标轴上绘制多对 x 和 y 坐标。此语法可替代将坐标指定为矩阵的形式。
- plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) 可为每个 x-y 对组指定特定的线型、标记和颜色。您可以对某些 x-y 对组指定 LineSpec,而对其他对组省略它。例如,plot(X1,Y1,"o",X2,Y2) 对第一个 x-y 对组指定标记,但没有对第二个对组指定标记。
- plot(Y) 绘制 Y 对一组隐式 x 坐标的图:
如果 Y 是向量,则 x 坐标范围从 1 到 length(Y)。
如果 Y 是矩阵,则对于 Y 中的每个列,图中包含一个对应的行。x 坐标的范围是从 1 到 Y 的行数。
如果 Y 包含复数,MATLAB® 绘制 Y 的虚部对 Y 的实部的图。如果同时指定了 X 和 Y,虚部将被忽略。
- plot(Y,LineSpec) 使用隐式 x 坐标绘制 Y,并指定线型、标记和颜色。
表数据
- plot(tbl,xvar,yvar) 绘制表 tbl 中的变量 xvar 和 yvar。要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量。要绘制多个数据集,请为 xvar、yvar 或两者指定多个变量。如果两个参量都指定多个变量,它们指定的变量数目必须相同。 (自 R2022a 起)
- plot(tbl,yvar) 绘制表中的指定变量对表的行索引的图。如果该表是时间表,则绘制指定变量对时间表的行时间的图。 (自 R2022a 起)
其他选项
- plot(ax,___) 在目标坐标区上显示绘图。将坐标区指定为上述任一语法中的第一个参量。
- plot(___,Name,Value) 使用一个或多个名称-值参量指定 Line 属性。这些属性应用于绘制的所有线条。需要在上述任一语法中的所有参量之后指定名称-值参量。有关属性列表,请参阅 Line 属性。
- p = plot(___) 返回一个 Line 对象或 Line 对象数组。创建绘图后,使用 p 修改该绘图的属性。有关属性列表,请参阅 Line 属性。
参数说明
参数 | 说明 |
x | 横坐标数据,可以是向量或矩阵。 |
y | 纵坐标数据,可以是向量或矩阵。 |
LineSpec (可选) | 用于指定线型、标记和颜色,可以使用符号或字符串来表示。 |
LineSpec 说明
符号/字符串 | 说明 |
线型 | ’ -’ 实线, ’ --’ 虚线, ‘:’ 点线, ‘-.’ 点划线 |
标记 | ’ o’ 圆圈, ’ *’ 星号, ’ +’ 加号, ’ x’ 叉号 |
颜色 | ’ r’ 红色, ’ g’ 绿色, ’ b’ 蓝色, ’ k’ 黑色, ’ c’ 青色, ’ m’ 品红色, ’ y’ 黄色 |
举例
% 绘制简单线图x = [1 2 3 4];y = [2 3 5 7];plot(x, y);% 绘制带标记和颜色的线图plot(x, y, 'ro-');% 绘制多条线图x1 = [1 2 3 4];y1 = [2 3 5 7];x2 = [1 3 5 7];y2 = [4 6 8 10];plot(x1, y1, 'r-', x2, y2, 'b--');
注意事项
- LineSpec 中线型、标记和颜色的顺序可以任意排列。
- 如果不指定 LineSpec,则使用默认的实线、无标记和默认颜色。
- 可以只指定线型、标记或颜色中的一项或两项。
- 如果不指定横坐标数据,则默认横坐标为 1, 2, ... 的序列。
- 可以使用矩阵作为 x 或 y 的输入,此时会绘制多条线图。
- 可以重复输入 x 和 y,同时绘制多组线图。
9.2.1.2 plot 函数的名称 - 值参
plot 函数除了支持 LineSpec 参数控制线条颜色、线型和标记形状外,还支持使用名称-值参数进行更精细的调整,例如线条宽度、标记大小、标记颜色等。
以下是一些常用名称-值参数的总结:
参数名称 | 含义 | 默认值 | 示例代码 |
Color | 线条颜色 | [0 0.4470 0.7410] (蓝色) | plot(x,y,'Color',[1,0,0]) (红色) |
LineWidth | 线条宽度 | 0.5 | plot(x,y,'LineWidth',2) (宽度为2) |
Marker | 标记符号 | ‘none’ | plot(x,y,'Marker','o') (圆形标记) |
MarkerSize | 标记大小 | 6 | plot(x,y,'MarkerSize',10) (大小为10) |
MarkerEdgeColor | 标记的轮廓颜色 | ‘auto’ | plot(x,y,'MarkerEdgeColor','r') (红色轮廓) |
MarkerFaceColor | 标记填充颜色 | ‘none’ | plot(x,y,'MarkerFaceColor',[0,0,0]) (黑色填充) |
DatetimeTickFormat | datetime 刻度标签的格式 (横坐标是时间点数组) | MATLAB 默认格式 | plot(t,y,'DatetimeTickFormat','HH:mm') (显示小时和分钟) |
DurationTickFormat | duration 刻度标签的格式 (横坐标是持续时间数组) | MATLAB 默认格式 | plot(d,y,'DurationTickFormat','%H:%M:%S') (显示小时、分钟和秒) |
使用示例
% 绘制函数 y = x^2 在区间 [0, 5] 上的图像,设置线条宽度为 2,标记为圆形,标记大小为 10,标记填充颜色为红色x = 0:0.1:5;y = x.^2;plot(x,y,'LineWidth',2,'Marker','o','MarkerSize',10,'MarkerFaceColor','r');
注意事项
- 名称-值参数必须出现在其他参数之后。
- 使用名称-值参数无法为不同的线条设置不同的属性,例如线条宽度。
- 如果需要为不同的线条设置不同的属性,可以使用 hold on 命令将图像保持在当前坐标系中,然后分别绘制每条线并设置相应的属性。
更多名称-值参数
除了上述表格中列出的参数外,plot 函数还支持更多名称-值参数,例如:
- MarkerIndices: 指定哪些数据点上显示标记。
- LineStyle: 线型 (与 LineSpec 参数作用相同)。
- XData: 指定 x 轴数据。
- YData: 指定 y 轴数据。
更多可参考 MATLAB 官方文档。
9.2.2 hold on/hold off:同一个坐标区中绘制多个图形
功能概述
hold on 和 hold off 用于控制当前坐标区的“保持”状态。
hold on
开启坐标区保持状态。在此状态下,后续的绘图命令(如 plot, scatter 等)不会清除当前图形,而是直接在现有图形上叠加绘制新的图形。
hold off
关闭坐标区保持状态。这是 MATLAB 的默认状态。在此状态下,执行新的绘图命令会清除当前坐标区的所有内容,然后绘制新图形。
简单来说,hold on 就像是在一张画上覆盖一层透明描图纸继续画,而 hold off 则是每次都换一张新纸画。
详细语法与参数说明
这两个命令的语法非常简单,没有复杂的参数。
命令 | 语法 | 参数说明 |
开启保持 | hold on | 无参数。执行后,当前坐标区进入保持状态。 |
关闭保持 | hold off | 无参数。执行后,当前坐标区退出保持状态,恢复到默认的“替换”模式。 |
切换状态 | hold | 无参数。在 on 和 off 状态之间切换。如果当前是 on,则变为 off;反之亦然。 |
查询状态 | hold(state) | state 可以是一个逻辑变量。例如,ishold = hold('query') 会返回当前坐标区的保持状态(true 或 false)。 |
核心要点
- hold on 和 hold off 通常成对出现,以确保在完成叠加绘图后,绘图状态能恢复到默认,避免影响后续代码。
- 它们的作用域是当前图形窗口的当前坐标区。
- 如果有多个子图(subplot),hold 命令只对最后点击或最后操作的子图生效。
举例说明
示例 1:基础叠加绘图
这个例子展示了如何在一个坐标区中绘制两条不同属性的曲线。
% 准备数据x = 0:0.1:2*pi;y1 = sin(x);y2 = cos(x);% 绘制第一条曲线figure; % 创建一个新的图形窗口plot(x, y1, 'r-', 'LineWidth', 2); % 红色实线,线宽为2title('正弦和余弦函数图像');xlabel('x');ylabel('y');legend('sin(x)'); % 添加图例% 开启保持状态,准备叠加绘制hold on;% 绘制第二条曲线plot(x, y2, 'b--', 'LineWidth', 2); % 蓝色虚线,线宽为2legend('sin(x)', 'cos(x)'); % 更新图例,加入第二条曲线% 关闭保持状态,恢复默认hold off;
先用 plot 绘制了 sin(x) 的图像。
hold on 告诉 MATLAB:“接下来不要擦掉这张图,我要在上面继续画。”
第二个 plot 命令直接在 sin(x) 的图像上叠加绘制了 cos(x) 的图像。
hold off 将绘图状态恢复,这样如果后面还有 plot 命令,它会重新开始画一张新图。
示例 2:解决名称-值参数无法分别设置的问题
% 准备数据x = 0:0.01:6;y1 = x.^3;y2 = exp(x);% 创建图形和第一条曲线(红色实线,线宽1.5)figure;plot(x, y1, 'r-', 'LineWidth', 1.5);hold on; % 开启保持% 绘制第二条曲线(蓝色虚线,线宽3)plot(x, y2, 'b--', 'LineWidth', 3);% 添加图例和标签legend('y = x^3', 'y = e^x');title('不同属性的函数图像');xlabel('x');ylabel('y');grid on; % 添加网格% 关闭保持hold off;
总结
功能 | 命令 | 作用 | 使用场景 |
开启叠加绘图 | hold on | 保持当前图形,新图形叠加绘制 | 需要在同一坐标区展示多条曲线、散点或其他图形对象时。 |
关闭叠加绘图 | hold off | 清除当前图形,新图形替换旧图形(恢复默认) | 完成叠加绘图后,避免影响后续的绘图代码,是良好的编程习惯。 |
切换状态 | hold | 在 on 和 off 状态间切换 | 在循环或条件语句中,需要根据情况切换绘图模式时。 |
查询状态 | ishold = hold('query') | 获取当前坐标区的保持状态(true/false) | 在编写通用函数或工具箱时,需要根据当前状态决定下一步操作。 |
9.2.3 使用 legend 函数添加图例
功能概述
legend 函数用于在当前坐标区创建一个图例。
图例会关联图中的图形对象(如线条、散点等),并用一个小的文本标签和对应的样式(颜色、线型、标记)来解释每个对象代表什么。
详细语法与参数说明
legend 函数的语法支持多种调用方式
语法 | 参数说明 |
legend(label1, ..., labelN) | 最常用的语法。为当前坐标区中的图形对象按创建顺序手动指定图例标签。label1 对应第一个对象,以此类推。标签可以是字符向量、字符串或字符串数组。 |
legend(labels) | 使用字符串数组 labels 为图形对象指定标签。 |
legend(obj, ___) | 指定要添加图例的图形对象 obj(如线条句柄)。这种方式可以精确控制哪些对象显示在图例中,以及它们的顺序。obj 后面可以跟上标签。 |
legend(___,'Location',loc) | 核心参数。使用 'Location' 名称-值参数来指定图例在坐标区中的位置。loc 可以是字符串或字符向量。 |
legend(___,'Orientation',orient) | 指定图例的排列方向。orient 可以是 'vertical'(垂直,默认)或 'horizontal'(水平)。 |
legend('toggle') | 切换图例的可见状态。如果图例存在则隐藏,如果不存在则显示。 |
legend('hide') | 隐藏图例。 |
legend('show') | 显示图例。 |
legend('off') | 删除图例。 |
'Location' 参数的可选值
这是 legend 中最重要的参数之一,它决定了图例放置的位置,以避免遮挡数据。
位置值 | 说明 |
'north' | 坐标区内的顶部 |
'south' | 坐标区内的底部 |
'east' | 坐标区内的右侧 |
'west' | 坐标区内的左侧 |
'northeast' | 坐标区内的右上角(默认) |
'northwest' | 坐标区内的左上角 |
'southeast' | 坐标区内的右下角 |
'southwest' | 坐标区内的左下角 |
'northoutside' | 坐标区外的顶部 |
'southoutside' | 坐标区外的底部 |
'eastoutside' | 坐标区外的右侧 |
'westoutside' | 坐标区外的左侧 |
'northeastoutside' | 坐标区外的右上角 |
'northwestoutside' | 坐标区外的左上角 |
'southeastoutside' | 坐标区外的右下角 |
'southwestoutside' | 坐标区外的左下角 |
'best' | 在坐标区内部,MATLAB 自动选择最佳位置以避免与数据冲突 |
'bestoutside' | 在坐标区外部,MATLAB 自动选择最佳位置 |
举例说明
示例 1:基础用法与位置调整
这个例子复用之前 hold on 的例子,并为其添加一个位于左上角的图例。
% 准备数据x = 0:0.1:2*pi;y1 = sin(x);y2 = cos(x);% 绘制第一条曲线figure;plot(x, y1, 'r-', 'LineWidth', 2);hold on;% 绘制第二条曲线plot(x, y2, 'b--', 'LineWidth', 2);% 添加图例,并指定位置为左上角legend('sin(x)', 'cos(x)', 'Location', 'northwest');title('正弦和余弦函数图像');xlabel('x');ylabel('y');grid on;hold off;
使用 hold on 绘制了两条曲线。
legend('sin(x)', 'cos(x)', ...) 为第一条红色实线指定标签 'sin(x)',为第二条蓝色虚线指定标签 'cos(x)'。
'Location', 'northwest' 将整个图例框放置在坐标区的左上角。
示例 2:使用句柄控制图例内容
有时候可能绘制了很多条线,但只想为其中几条添加图例。这时,获取图形对象的句柄就非常有用。
x = linspace(0, 10, 100);y1 = sin(x);y2 = 0.5*sin(x);y3 = cos(x);% 绘制所有曲线,并获取它们的句柄figure;p1 = plot(x, y1, 'k-'); % 黑色实线hold on;p2 = plot(x, y2, 'c--'); % 青色虚线p3 = plot(x, y3, 'g-.'); % 绿色点划线hold off;% 只为 p1 和 p3 添加图例legend([p1, p3], {'主要正弦波', '余弦波'}, 'Location', 'best');title('选择性添加图例');xlabel('x');ylabel('y');grid on;
p1 = plot(...) 在绘制图形的同时,将返回的图形对象(线条)句柄存储在变量 p1, p2, p3 中。
legend([p1, p3], ...) 第一个参数是一个句柄数组 [p1, p3],明确告诉 legend 只为这两条线创建图例项。
第二个参数是与之对应的标签字符串数组 {'主要正弦波', '余弦波'}。
注意,青色虚线 p2 没有出现在图例中。
总结
legend 是提升图表可读性的重要工具。熟练掌握它的各种用法,特别是 'Location' 参数和句柄控制,能让你在制作学术报告、数据分析图表时更加得心应手。
功能 | 语法/参数 | 作用 | 使用场景 |
手动添加标签 | legend('label1', 'label2') | 按绘图顺序为每个对象指定标签 | 最常用、最直接的方式,适用于大多数情况。 |
指定位置 | 'Location', 'northwest' | 将图例放置在坐标区的特定位置 | 避免图例遮挡重要的数据点或曲线。 |
选择性添加 | legend([h1, h3], ...) | 只为指定的图形对象(通过句柄)添加图例 | 当图中包含辅助线、参考线或不需说明的元素时。 |
水平排列 | 'Orientation', 'horizontal' | 使图例项水平排列而非垂直排列 | 当坐标区顶部或底部有较多空间时。 |
动态控制 | legend('toggle') | 切换图例的显示/隐藏状态 | 在交互式应用或GUI中,用于动态控制界面元素。 |
删除图例 | legend('off') | 从坐标区中彻底删除图例 | 当不再需要图例时。 |
9.2.4 使用 text 函数在图形中添加文本
功能概述
text 函数用于在当前坐标区的指定位置添加文本字符串。
与 legend 不同,text 的位置是完全由你通过坐标值来定义的,这赋予了它极高的灵活性。
可以用它来标记峰值、解释异常值、或者在任何需要文字说明的地方进行注释。
详细语法与参数说明
text 函数的核心是“位置”和“内容”。
支持丰富的名称-值参数来控制文本的外观。
语法 | 参数说明 |
text(x, y, txt) | 最基础的语法。在二维坐标 (x, y) 处添加文本 txt。txt 可以是字符向量、字符串或字符串数组。 |
text(x, y, z, txt) | 在三维坐标 (x, y, z) 处添加文本 txt。 |
text(___,Name,Value) | 在上述任何语法后,添加一个或多个名称-值参数对,来指定文本的属性,如字体大小、颜色、对齐方式等。 |
常用名称-值参数
参数名称 | 含义 | 可选值/示例 |
FontSize | 字体大小 | 正数,如 12 (默认通常是 10) |
Color | 文本颜色 | 颜色简写 ('r', 'g') 或 RGB 向量 ([0, 0, 1]) |
FontWeight | 字体粗细 | 'normal' (默认), 'bold' |
HorizontalAlignment | 水平对齐方式 | 'left' (默认), 'center', 'right' |
VerticalAlignment | 垂直对齐方式 | 'middle' (默认), 'top', 'bottom', 'baseline', 'cap' |
BackgroundColor | 文本背景颜色 | 颜色简写或 RGB 向量,如 'yellow' |
EdgeColor | 文本框边缘颜色 | 颜色简写或 RGB 向量,如 'k' (黑色) |
Interpreter | 文本解释器 | 'tex' (默认, 支持 LaTeX 子集), 'latex' (完整 LaTeX), 'none' |
这些参数能像在 Word 里一样精细地调整文本样式。
核心要点
对齐方式
HorizontalAlignment 和 VerticalAlignment 非常重要。
它们决定了指定的坐标 (x, y) 是文本的左上角、中心还是右下角等。
例如,'HorizontalAlignment','right' 会让文本的右边缘对齐到指定的 x 坐标。
Interpreter
设置为 'tex' 时,可以在文本中使用简单的 LaTeX 命令来显示数学公式、希腊字母等。
如 '\alpha' 会显示为 α,'x^2' 会显示为 x²。
举例说明
示例 1:标记数据点
这个例子中,绘制一个正弦波,并标记出它的最大值点。
% 准备数据x = 0:0.1:2*pi;y = sin(x);% 绘制图形figure;plot(x, y, 'b-', 'LineWidth', 2);hold on;% 找到最大值点的坐标[y_max, idx] = max(y);x_max = x(idx);% 绘制最大值点plot(x_max, y_max, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r');% 在最大值点旁边添加文本注释% 使用右对齐,让文本在点的左侧text(x_max, y_max, ' 峰值点', ...'FontSize', 12, ...'Color', 'r', ...'FontWeight', 'bold', ...'HorizontalAlignment', 'left', ...'VerticalAlignment', 'middle');title('正弦函数及其峰值');xlabel('x');ylabel('sin(x)');grid on;hold off;
找到最大值点的坐标 (x_max, y_max)。
text(x_max, y_max, ...) 将文本的起始位置设置在该点。
'HorizontalAlignment','left' 和 'VerticalAlignment','middle' 确保文本的左边缘中心对齐到 (x_max, y_max),这样文本就会整齐地出现在点的右侧。
还调整了字体大小、颜色和粗细,使其更醒目。
示例 2:添加数学公式
利用 Interpreter 属性,可以在图中添加漂亮的数学公式。
% 准备数据x = linspace(-2, 2, 200);y = x.^2;% 绘制图形figure;plot(x, y, 'm-', 'LineWidth', 2);% 在图上添加公式text(0, 3, '函数: y = x^2', ...'Interpreter', 'tex', ...'FontSize', 14, ...'HorizontalAlignment', 'center');title('二次函数图像');xlabel('x');ylabel('y');grid on;
text(0, 3, ...) 将文本放置在坐标 (0, 3) 附近。
'Interpreter','tex' 是关键,它告诉 MATLAB 将字符串 'y = x^2' 中的 ^ 解析为上标。
'HorizontalAlignment','center' 让文本以 (0, 3) 为中心居中对齐。
总结
text 函数是 MATLAB 可视化中实现“精准表达”的工具。
功能 | 语法/参数 | 作用 | 使用场景 |
基础添加文本 | text(x, y, 'label') | 在坐标 (x, y) 处添加文本 ‘label’ | 快速在图上做简单标记。 |
设置字体样式 | 'FontSize',12, 'Color','r' | 调整文本的大小、颜色等外观 | 突出重要信息,美化图表。 |
控制对齐方式 | 'HorizontalAlignment','center' | 精确控制文本相对于指定坐标的对齐方式 | 让文本与数据点、箭头等元素精确对齐。 |
添加文本框 | 'BackgroundColor','y' | 为文本添加背景色和边框 | 让文本在复杂的背景中依然清晰可读。 |
显示数学公式 | 'Interpreter','tex' | 使用 LaTeX 语法在文本中插入数学符号和公式 | 在学术论文或报告中标注函数、变量等。 |
结合 hold on,可以在任何图形上自由地添加想要的任何文字说明,让图表不仅能展示数据,更能讲述数据背后的故事。