MATLAB学习文档(二十五)
参考资料:MATLAB 教程新手入门篇——数学建模清风主讲
目录
9.2.5 添加标题和坐标轴的标签
基本语法
标题设置
坐标轴标签设置
参数说明
案例
案例1:基础标签设置
案例2:带属性设置的标签
案例3:使用LaTeX公式
案例4:多行标签
实用技巧
图形句柄操作:可以获取和修改已存在的标签
动态标签:在循环中更新标签
中文支持:确保使用支持中文的字体
9.2.6 修改坐标区的外观
核心语法
方式一:使用 axis 函数(快速设置)
方式二:使用 set 函数(精细控制)
关键参数说明
案例
案例1:设置坐标范围与网格
案例2:自定义刻度与标签
案例3:美化坐标区外观
案例4:反转坐标轴
核心建议
9.2.7 图形窗口上菜单栏和工具栏的介绍
菜单栏介绍
创建菜单栏语法
参数说明
常用属性
案例代码
工具栏介绍
默认工具栏功能
自定义工具栏语法
参数说明
案例代码
菜单栏与工具栏对比总结
注意事项
9.2.8 在同一个图形窗口上绘制多个子图
核心语法:subplot
基本语法
参数说明
案例
建议
9.2.9 将绘制好的图形保存到本地
核心语法:saveas 函数
基本语法
参数说明
案例
高级语法:print 函数
基本语法
参数说明
案例
交互式方法:图形窗口菜单
建议
9.2.10 “傻瓜式” 绘图方法
核心语法:plot 函数
基本语法
参数说明
案例
建议
9.2.5 添加标题和坐标轴的标签
功能 | 语法 | 常用属性组合 | 适用场景 |
简单标题 | title(‘文本’) | 无 | 快速标注 |
格式化标题 | title(‘文本’,‘FontSize’,12) | FontSize, FontWeight, Color | 需要强调的标题 |
数学公式标题 | title(‘公式’,‘Interpreter’,‘latex’) | Interpreter, FontSize | 学术论文图表 |
坐标轴标签 | xlabel(‘文本’) | FontSize, Color | 基本标注 |
旋转标签 | ylabel(‘文本’,‘Rotation’,0) | Rotation, FontSize | 横向Y轴标签 |
多行标签 | title({‘行1’;‘行2’}) | 无 | 复合信息标注 |
基本语法
标题设置
title('字符串标题')title('字符串标题','属性名',属性值,...)
坐标轴标签设置
xlabel('字符串标签')xlabel('字符串标签','属性名',属性值,...)ylabel('字符串标签')ylabel('字符串标签','属性名',属性值,...)
参数说明
属性名 | 可选值 | 说明 |
‘FontSize’ | 数值(如12) | 字体大小 |
‘FontWeight’ | ‘normal’/‘bold’ | 字体粗细 |
‘Color’ | 颜色字符/RGB值 | 字体颜色 |
‘Interpreter’ | ‘none’/‘latex’/‘tex’ | 文本解释器 |
‘Rotation’ | 角度值(如90) | 文本旋转角度 |
案例
案例1:基础标签设置
x = 0:0.1:2*pi;y = sin(x);plot(x,y)title('正弦函数图像')xlabel('时间(秒)')ylabel('幅值')
案例2:带属性设置的标签
x = linspace(0,10,100);y = exp(-x).*sin(x);plot(x,y,'r-','LineWidth',2)title('衰减振荡曲线','FontSize',14,'FontWeight','bold')xlabel('时间 t','FontSize',12,'Color','b')ylabel('位移 y','FontSize',12,'Color','b')
案例3:使用LaTeX公式
x = -2:0.1:2;y = x.^2;plot(x,y)title('二次函数 $y = x^2$','Interpreter','latex')xlabel('自变量 $x$','Interpreter','latex')ylabel('因变量 $y$','Interpreter','latex')
案例4:多行标签
x = 1:10;y = rand(1,10);plot(x,y,'o-')title({'实验数据点';'2025年测量'})xlabel('样本编号')ylabel('测量值')
实用技巧
图形句柄操作:可以获取和修改已存在的标签
h_title = get(gca,'Title');set(h_title,'String','新标题','Color','red')
动态标签:在循环中更新标签
for i = 1:5plot(rand(1,10))title(['第',num2str(i),'次实验'])pause(1)end
中文支持:确保使用支持中文的字体
title('中文标题','FontName','SimHei')
9.2.6 修改坐标区的外观
目标 | 推荐语法 | 常用属性组合 | 适用场景 |
快速调整范围 | axis([xmin xmax ymin ymax]) | 无 | 初步查看数据局部细节 |
统一比例 | axis equal 或 axis square | 无 | 绘制圆形、几何图形,确保不变形 |
显示网格 | set(gca, 'XGrid', 'on', 'YGrid', 'on') | GridLineStyle, GridAlpha | 数据对比,读数辅助 |
自定义刻度 | set(gca, 'XTick', ..., 'XTickLabel', ...) | YTick, YTickLabel | 展示分类数据、特定时间点 |
整体美化 | set(gca, ...) | Color, Box, LineWidth, XColor, FontSize | 学术论文、报告、演示文稿 |
特殊方向 | set(gca, 'YDir', 'reverse') | XDir | 深度数据、自上而下的流程图 |
核心语法
修改坐标区外观主要通过 axis 和 set(gca, ...) 两种方式实现。
方式一:使用 axis 函数(快速设置)
axis([xmin xmax ymin ymax]) % 设置坐标范围axis square % 使坐标区呈正方形axis equal % 使各坐标轴刻度增量相同axis tight % 紧凑显示数据范围axis off % 关闭坐标轴背景和刻度axis on % 显示坐标轴背景和刻度axis xy % 使用标准的笛卡尔坐标系axis ij % 使用矩阵坐标系(原点在左上角)
方式二:使用 set 函数(精细控制)
set(gca, 'PropertyName', PropertyValue, ...)% gca 代表 "get current axes",即获取当前坐标区的句柄
关键参数说明
属性名 (PropertyName) | 可选值/类型 | 说明 |
XLim, YLim | [最小值, 最大值] | 设置X、Y轴的显示范围 |
XTick, YTick | 向量,如 [0, 2, 4, 6] | 设置主刻度线的位置 |
XTickLabel, YTickLabel | 字符串元胞数组 | 设置刻度标签的文本 |
XGrid, YGrid | on / off | 是否显示X、Y轴的网格线 |
Box | on / off | 是否显示坐标区的边框 |
Color | 颜色字符 (如 'w') 或 RGB值 | 设置坐标区的背景颜色 |
XColor, YColor | 颜色字符或RGB值 | 设置X、Y轴线的颜色 |
LineWidth | 数值(如 1.5) | 设置坐标轴线的宽度 |
FontName | 字符串(如 'Times New Roman') | 设置刻度标签的字体 |
FontSize | 数值(如 12) | 设置刻度标签的字体大小 |
Dir | 'normal', 'reverse' | 设置坐标轴方向(正向或反向 |
案例
案例1:设置坐标范围与网格
x = linspace(0, 10, 100);y = sin(x) + 0.5*randn(size(x));plot(x, y);% 使用 axis 快速设置范围axis([0 12 -2 2]); % X轴[0,12], Y轴[-2,2]% 使用 set 精细控制set(gca, 'XGrid', 'on', 'YGrid', 'on', 'GridLineStyle', '--', 'GridAlpha', 0.5);title('带网格和自定义范围的信号图');
案例2:自定义刻度与标签
x = 1:5;y = [10, 25, 8, 30, 15];plot(x, y, '-o');% 自定义刻度位置和标签set(gca, 'XTick', 1:5, ...'XTickLabel', {'样本A', '样本B', '样本C', '样本D', '样本E'}, ...'YTick', 0:5:35);title('自定义刻度标签示例');
案例3:美化坐标区外观
x = linspace(0, 2*pi, 100);y = cos(x);plot(x, y, 'LineWidth', 2);% 综合美化set(gca, 'Color', [0.95 0.95 0.95], ... % 浅灰色背景'Box', 'on', ... % 显示边框'LineWidth', 1.2, ... % 坐标轴线加粗'XColor', [0.2 0.2 0.2], ... % 深灰色轴线'YColor', [0.2 0.2 0.2], ...'FontSize', 12, ... % 字体加大'FontName', 'Arial');title('美化后的坐标区');
案例4:反转坐标轴
x = 1:100;y = cumsum(randn(1,100));plot(x, y);% 反转Y轴,常用于深度或某些递减指标set(gca, 'YDir', 'reverse');title('Y轴反向示例(如深度剖面)');
核心建议
- 快速操作用 axis,精细定制用 set(gca, ...)。
- 在编写脚本时,将所有 set 命令集中在 plot 命令之后,代码结构更清晰。
9.2.7 图形窗口上菜单栏和工具栏的介绍
菜单栏介绍
MATLAB图形窗口的菜单栏默认包含“文件”“编辑”“视图”“插入”“工具”“桌面”“窗口”“帮助”等选项,用户可通过uimenu函数自定义菜单。
创建菜单栏语法
h = uimenu(parent, 'PropertyName', PropertyValue, ...);
参数说明
parent:父对象句柄(如图形窗口gcf或父菜单句柄)。
'PropertyName':属性名(如'Label'、'Callback')。
PropertyValue:属性值(如菜单项名称、回调函数)。
常用属性
属性名 | 说明 | 示例值 |
'Label' | 菜单项名称(支持&定义快捷键) | '文件(&F)' |
'Callback' | 点击菜单项执行的命令或函数 | 'plot(rand(10))' |
'Separator' | 是否在菜单项上方添加分割线('on'/'off') | 'on' |
'Checked' | 是否显示选中标记('on'/'off') | 'on' |
'Enable' | 是否启用菜单项('on'/'off') | 'off' |
案例代码
% 创建图形窗口并隐藏默认菜单fig = figure('Name', '自定义菜单', 'MenuBar', 'none');% 添加一级菜单h_file = uimenu(fig, 'Label', '文件');h_edit = uimenu(fig, 'Label', '编辑');% 添加子菜单uimenu(h_file, 'Label', '保存', 'Callback', 'saveas(gcf)');uimenu(h_file, 'Label', '打开', 'Separator', 'on', 'Callback', 'uigetfile');uimenu(h_edit, 'Label', '复制', 'Callback', 'disp("复制操作")');
工具栏介绍
MATLAB图形窗口的工具栏提供快捷操作按钮,如放大、平移、数据游标等,用户可通过uitoolbar自定义工具栏。
默认工具栏功能
功能按钮 | 说明 |
放大/缩小 | 缩放图形 |
平移 | 拖动图形 |
数据游标 | 显示数据点坐标 |
插入图例 | 添加图例 |
插入颜色栏 | 添加颜色标尺 |
自定义工具栏语法
h_toolbar = uitoolbar(parent);h_push = uipushtool(h_toolbar, 'CData', icon, 'TooltipString', '提示', 'ClickedCallback', callback);
参数说明
parent:父对象(如图形窗口)。
'CData':按钮图标(矩阵或图像)。
'TooltipString':鼠标悬停提示文本。
'ClickedCallback':点击按钮执行的回调函数。
案例代码
% 创建工具栏并添加按钮h_toolbar = uitoolbar(gcf);icon = imread('icon.png'); % 加载图标uipushtool(h_toolbar, 'CData', icon, 'TooltipString', '绘制正弦波', ...'ClickedCallback', 'plot(sin(0:0.1:2*pi))');
菜单栏与工具栏对比总结
特性 | 菜单栏 | 工具栏 |
用途 | 分类操作(如文件、编辑) | 快捷操作(如缩放、标注) |
创建函数 | uimenu | uitoolbar + uipushtool |
交互方式 | 下拉菜单 | 按钮点击 |
自定义性 | 支持多级菜单、分隔线、快捷键 | 支持图标、提示文本 |
适用场景 | 复杂功能分组 | 常用功能快速访问 |
注意事项
- 隐藏默认菜单:需设置'MenuBar', 'none'。
- 回调函数:建议封装为独立函数或脚本,便于维护。
- 图标资源:自定义工具栏按钮需准备图标文件(如PNG)。
9.2.8 在同一个图形窗口上绘制多个子图
方法/语法 | 特点 | 适用场景 | 关键点 |
subplot(m, n, p) | 创建规则的m行n列网格,在第p个位置绘图。 | 标准的多图对比展示,如2x2、3x1等。 | p的计数从左到右,从上到下。 |
subplot(m, n, p) (不规则) | 通过p的巧妙组合,让子图跨越多个网格。 | 需要突出某个主图,或创建不对称布局。 | 例如subplot(2,1,1)创建一个占满上方的大图。 |
h = subplot(...) | 创建子图的同时,返回其句柄h。 | 需要对特定子图进行精细、独立的属性定制。 | 通过set(h, 'Property', Value)修改属性。 |
核心语法:subplot
subplot 是创建子图最核心的函数,它将图形窗口划分为一个网格,并指定当前绘图的位置。
基本语法
subplot(m, n, p)
参数说明
参数 | 说明 |
| 将窗口划分成的行数。 |
| 将窗口划分成的列数。 |
| 指定当前激活的子图区域编号。编号从左上角开始,从左到右、从上到下依次为 1, 2, 3, … |
案例
案例1:规则网格布局(2x2布局)
这是最常用的方式,创建一个2行2列的网格来放置4个子图。
% 准备数据x = 0:0.1:2*pi;y1 = sin(x);y2 = cos(x);y3 = x.^2;y4 = exp(-x);% 创建2x2的子图subplot(2, 2, 1); % 激活第1个区域(左上角)plot(x, y1);title('正弦函数');subplot(2, 2, 2); % 激活第2个区域(右上角)plot(x, y2);title('余弦函数');subplot(2, 2, 3); % 激活第3个区域(左下角)plot(x, y3);title('二次函数');subplot(2, 2, 4); % 激活第4个区域(右下角)plot(x, y4);title('指数衰减');
案例2:不规则布局(占据多个网格)
有时候,我们希望某个子图更大,占据多个网格位置。
% 准备数据x = linspace(0, 10, 100);y1 = sin(x);y2 = cos(x);y3 = sin(x) + cos(x);% 第一个子图占据上方全部空间(2行1列的第1个位置)subplot(2, 1, 1);plot(x, y1, 'r-', 'LineWidth', 2);title('主图:正弦波');grid on;% 第二和第三个子图并排放在下方subplot(2, 2, 3); % 下方左侧plot(x, y2, 'b--');title('子图1:余弦波');subplot(2, 2, 4); % 下方右侧plot(x, y3, 'g:');title('子图2:正弦+余弦');
案例3:获取子图句柄进行高级控制
在复杂的图形定制中,我们可能需要获取每个子图的句柄,以便后续单独修改其属性(如字体、颜色等)。
% 准备数据x = 0:0.1:pi;y1 = sin(x);y2 = cos(x);% 创建子图并获取其句柄h1 = subplot(1, 2, 1); % 获取第一个子图的句柄h1plot(x, y1);title('子图A');h2 = subplot(1, 2, 2); % 获取第二个子图的句柄h2plot(x, y2);title('子图B');% 使用句柄进行后续定制set(h1, 'FontSize', 12, 'XColor', 'r'); % 修改第一个子图的字体和X轴颜色set(h2, 'YGrid', 'on', 'GridAlpha', 0.5); % 给第二个子图添加半透明网格线
建议
- 避免过度拥挤:子图太多会让图形难以阅读。如果超过4个,考虑创建多个图形窗口或使用交互式工具。
- 统一风格:在同一个窗口中的多个子图,尽量保持坐标轴范围、字体大小、颜色方案等风格的一致性。
- 善用标题:为每个子图添加清晰的标题,是确保信息准确传达的关键。
9.2.9 将绘制好的图形保存到本地
方法 | 语法示例 | 优点 | 缺点 | 适用场景 | 关键参数/备注 |
saveas函数 | saveas(gcf, 'myplot.png') | 语法简单,直观易用。 | 对图片质量(如分辨率)的控制能力较弱。 | 快速、常规的图形保存。 | formattype 可指定 ‘png’, ‘jpg’, ‘pdf’, ‘fig’ 等。 |
print函数 | print(gcf, 'myplot', '-dpng', '-r300') | 功能强大,可精确控制分辨率、渲染器、背景色等。 | 语法相对复杂。 | 对图片质量有高要求的场景,如学术论文、出版物。 | -dformat 指定格式,-rN 设置分辨率(N为dpi值)。 |
交互式菜单 | 在图形窗口点击 文件 -> 另存为... | 无需编写代码,可视化操作,非常方便。 | 无法实现自动化,不适用于脚本化工作流。 | 一次性、探索性的绘图保存。 | 支持多种格式,可在保存对话框中设置选项。 |
核心语法:saveas 函数
saveas 是最直接、最简单的保存函数,它将图形窗口(Figure)的内容保存为文件。
基本语法
saveas(fig, filename)saveas(fig, filename, formattype)
参数说明
参数 | 描述 |
fig | 要保存的图形对象的句柄。gcf (Get Current Figure) 是一个常用快捷方式,代表当前活动的图形窗口。 |
filename | 字符串,指定保存的文件名(可以包含路径)。 |
formattype | 可选,字符串,指定保存的文件格式。如果省略,MATLAB会根据filename的扩展名推断。 |
案例
案例1:保存为PNG图片(默认分辨率)
x = linspace(0, 2*pi, 100);y = sin(x);plot(x, y);title('正弦函数图像');% 将当前图形保存为 'sine_plot.png'saveas(gcf, 'sine_plot.png');
案例2:明确指定格式保存为PDF
x = linspace(0, 2*pi, 100);y = cos(x);plot(x, y, 'r--', 'LineWidth', 2);title('余弦函数图像');% 将当前图形保存为 'cosine_plot.pdf'saveas(gcf, 'cosine_plot.pdf', 'pdf');
案例3:保存为可再次编辑的FIG文件
% ... 绘图代码 ...% 将当前图形保存为 'my_raw_data.fig'saveas(gcf, 'my_raw_data.fig', 'fig');% 这个文件以后可以在MATLAB中打开,并继续编辑所有图形元素
高级语法:print 函数
当你需要更精细地控制输出质量,特别是设置分辨率时,print 函数是更强大的选择。
基本语法
print(fig, filename, formattype)print(fig, filename, '-r分辨率', formattype)
参数说明
参数 | 描述 |
fig | 图形句柄,通常使用 gcf。 |
filename | 保存的文件名。 |
formattype | 图像格式,如 -dpng, -djpeg, -dtiff, -dpdf, -dsvg 等。注意前面的 -d。 |
-r分辨率 | 关键参数!用于设置图像的分辨率(DPI,每英寸点数)。例如 -r300 表示300 DPI。 |
案例
案例4:保存高分辨率PNG(适合论文发表)
x = linspace(0, 10, 200);y = exp(-x/10) .* sin(x);plot(x, y);title('衰减振荡');% 将当前图形以300 DPI的分辨率保存为 'high_res_plot.png'print(gcf, 'high_res_plot.png', '-dpng', '-r300');
案例5:保存为矢量图PDF(无限缩放不失真)
% ... 绘图代码 ...% 将当前图形保存为矢量PDF,非常适合打印和学术出版print(gcf, 'vector_plot.pdf', '-dpdf', '-r600'); % -r600对PDF也有效果
交互式方法:图形窗口菜单
对于偶尔的、非脚本化的保存,直接使用图形窗口的菜单是最直观的。
在图形窗口中,点击菜单栏的 "File" -> "Save As..."。
在弹出的对话框中,选择你想要保存的路径、文件名和文件类型(如PNG、PDF、JPEG等)。
点击"保存"即可。
建议
- 报告与论文首选:对于需要插入Word或LaTeX的报告,PDF格式是最佳选择,因为它是矢量图,无论放大多少倍都保持清晰。如果必须用位图,请使用PNG格式并设置足够高的分辨率(如300dpi)。
- 保留可编辑文件:在保存最终图片的同时,建议使用 saveas(gcf, 'myplot.fig') 保存一个 .fig 文件。这是MATLAB的原生格式,你可以随时重新打开它,修改标题、坐标轴、线条样式等所有内容,非常方便。
- 脚本化工作流:当你的分析涉及生成大量图表时(比如分析不同乡镇的调研数据),务必在脚本中使用 saveas 或 print 函数实现自动化保存,这会极大提高你的工作效率。
9.2.10 “傻瓜式” 绘图方法
语法 | 参数说明 | 优点 | 缺点 | 适用场景 | 案例 |
plot(Y) | Y:数据向量 | 极其简单,无需准备X轴数据 | X轴无实际物理意义,仅为索引 | 快速查看单变量数据的序列分布 | plot([1, 3, 2, 5]); |
plot(X, Y) | X:X轴数据向量 | 最常用,X和Y对应关系明确 | 需要准备两组长度相同的数据 | 绘制具有明确自变量和因变量的关系图 | plot(time, data); |
plot(X, Y_matrix) | X:X轴数据向量 | 一条命令绘制多条线,自动配色 | 需要将多组Y数据组织成矩阵 | 在同一坐标系下对比多组数据的变化趋势 | plot(time, [data1; data2]'); |
核心语法:plot 函数
plot 函数是MATLAB二维绘图的基础,它的设计理念就是“你给我数据,我给你图形”。
基本语法
plot(Y)plot(X, Y)
参数说明
参数 | 描述 |
Y | 一个向量。MATLAB会将Y的每个元素作为Y坐标,而它们的索引(1, 2, 3...)会自动作为X坐标。 |
X | 一个向量,提供X轴坐标。 |
Y | 一个向量,提供Y轴坐标。X和Y的长度必须相同。 |
案例
案例1:最“傻瓜”的方式 —— 只给Y数据
如果你只有一组数据,想看看它的走势,直接把数据扔给 plot 就行。
% 假设这是你调研中记录的某种认知指数随时间的变化cognition_index = [5, 6, 8, 7, 9, 12, 11, 15];plot(cognition_index);title('认知指数变化趋势'); % 加个标题让图更清晰
案例2:最常用的方式 —— 给出X和Y数据
通常你的数据是成对出现的,比如时间和对应的测量值。
% 假设这是调研的8个时间点(单位:周)time_points = 1:8;% 对应的认知指数cognition_index = [5, 6, 8, 7, 9, 12, 11, 15];plot(time_points, cognition_index);title('认知指数随时间变化');xlabel('时间 (周)');ylabel('认知指数');
案例3:同时绘制多条线
想在一张图里对比不同群体的数据?plot 也能轻松搞定。
time_points = 1:8;% 群体A的认知指数group_A = [5, 6, 8, 7, 9, 12, 11, 15];% 群体B的认知指数group_B = [3, 5, 6, 8, 7, 9, 10, 12];% 将X和两组Y数据以矩阵形式传入plot(time_points, [group_A; group_B]');title('两个群体认知指数对比');xlabel('时间 (周)');ylabel('认知指数');legend('群体A', '群体B'); % 加个图例区分一下
建议
- 快速探索:在数据分析初期,用 plot(Y) 快速查看数据分布,帮你快速发现异常值或大致趋势。
- 标准作图:在正式报告中,99%的情况都应该使用 plot(X, Y),确保坐标轴标签清晰,信息准确。
- 对比分析:plot(X, Y_matrix) 是最高效的选择。