MATLAB学习文档(二十五)
MATLAB二维平面上的线图(plot)及通用绘图操作
参考资料:MATLAB 教程新手入门篇——数学建模清风主讲
目录
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:5
plot(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); % 获取第一个子图的句柄h1
plot(x, y1);
title('子图A');
h2 = subplot(1, 2, 2); % 获取第二个子图的句柄h2
plot(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) 是最高效的选择。
更多推荐



所有评论(0)