Matlab使用小技巧合集
磕盐小白如何逐步锻炼为学术大神?
作为常用的磕盐工具之一,
功能强大,但很多细节和小技巧能极大提升你的编程效率和代码可读性。本博主总结了一下学习Matlab过程中用到的一些小技巧,精选多条实用技巧,涵盖
Matlab
、
绘图
、
表格处理
、
性能优化
等方面。每段代码均附带详细注释,帮助你快速掌握并灵活运用。
文件操作
目录
Matlab使用小技巧合集
目录 绘图技巧
1. 图中绘制矩形窗口及文字注释2. 图表格式设置与坐标轴限制3. 绘制带误差条的柱状图4. 在图像中绘制多个矩形区域并标注文字5. 修改绘图字体大小和字体6. 按比例放大显示较小图像7. 人工合成subplot大图的示范8. 取消图片边框显示9. 使用tiledlayout绘制多图并共享轴标签10. 设置图窗大小 数据处理与表格
11. 使用inputParser实现函数变量输入限制12. 创建并初始化表格数据结构13. 创建复杂表格并赋值(含字符串和数组)14. 读取Excel文件为table变量15. 矩阵边界填充示例 性能优化与运行控制
16. 计时代码段,测量函数执行时间17. 固定随机数种子,保证结果可复现 文件操作与图像保存
18. 高效保存图片且不弹出图形窗口19. 创建文件夹(若不存在则新建)20. Matlab函数中处理缺省参数示范21. 变量保存示例22. 图窗保存与打开 动态图像处理
23. 制作GIF动画文件示例24. 读取GIF指定帧并显示
绘图技巧
1. 图中绘制矩形窗口及文字注释
% 在图中绘制矩形区域,'Position'四元组为[x,y,width,height]
rectangle('Position',[1+off_r,1+off_a,nfftr,nffta]);
% 在指定位置添加文字,设置字体大小和颜色
text(1+off_r-50, -50+off_a, '6', 'FontSize', fontsize, 'Color', fontcolor);
作用说明:
用
绘制矩形框,常用于标记感兴趣区域。text函数添加文字注释,方便标注数据点或图形元素。
rectangle
2. 图表格式设置与坐标轴限制
axis equal; % 坐标轴等比例显示
[r_num, c_num] = size(input);
title(inputName, 'Interpreter', "none", 'FontSize', 19); % 设置标题,不进行转义
xlim([1, c_num]); % 设置x轴显示范围
ylim([1, r_num]); % 设置y轴显示范围
clear r_num c_num; % 清理变量
作用说明:
保证图形显示的比例真实,避免变形。设置标题及坐标轴范围,提升图形的阅读体验。
3. 绘制带误差条的柱状图
figure;
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
bar(x, y); hold on;
err = 8 * ones(size(y)); % 误差值
errorbar(x, y, err, 'k', 'linestyle', 'none', 'lineWidth', 1);
作用说明:
结合bar和errorbar函数绘制柱状图及其误差范围,常用于统计展示。
4. 在图像中绘制多个矩形区域并标注文字
load 'data.mat'
figure;
imagesc(mask); hold on;
for i = 1:8
rectangle('Position', [ROIAttribution{i, 'x1'}, ROIAttribution{i, 'y1'}, ...
ROIAttribution{i, 'x2'} - ROIAttribution{i, 'x1'} + 1, ROIAttribution{i, 'y2'} - ROIAttribution{i, 'y1'} + 1], ...
'EdgeColor', 'r');
text(ROIAttribution{i, 'x1'} - 50, -50 + ROIAttribution{i, 'y1'}, ROIAttribution.Row{i}, ...
'FontSize', 12, 'Color', 'w');
end
axis equal;
[r_num, c_num] = size(mask);
xlim([1, c_num]);
ylim([1, r_num]);
clear r_num c_num;
hold off;
作用说明:
批量绘制多个矩形框用于标记区域,并添加对应文字说明,适合ROI(感兴趣区域)分析。
5. 修改绘图字体大小和字体
% 注意:调用plot等绘图函数后设置字体属性
set(gca, 'FontName', 'Times New Roman', 'FontSize', 14);
作用说明:
自定义坐标轴字体样式和大小,美化图形输出。
6. 按比例放大显示较小图像
imshow(groundTruthpatch, 'InitialMagnification', 'fit');
作用说明:
自动缩放图像以适应显示窗口,提升视觉效果。
7. 人工合成subplot大图的示范
J = 8;
dis = 10;
dis_mat = zeros(im_w, im_w * dis);
ind = find((test_labels == J) ~= 0);
for i = 1:dis
dis_mat(1:im_w, (1 + im_w * (i - 1)):(im_w * i)) = D(:, :, ind(i));
end
imshow(dis_mat, 'InitialMagnification', 'fit');
作用说明:
方法是将多张图像横向拼接成一张大图,实现自定义子图排列。
8. 取消图片边框显示
imshow(img, 'Border', 'tight');
作用说明:
去除imshow默认的边框,使显示更紧凑美观。
9. 使用tiledlayout绘制多图并共享轴标签
tiledlayout(2, 2, 'TileSpacing', 'tight');
nexttile;
surf(X, Y, Z);
title('Sample 1');
nexttile;
surf(X, Y, Z);
title('Sample 2');
% 创建共享标题和轴标签
t = sgtitle('Size vs. Distance');
xlabel(t, 'Distance (mm)');
ylabel(t, 'Size (mm)');
作用说明:
新式布局管理器tiledlayout,方便绘制多子图并统一管理标题和轴标签。
10. 设置图窗大小
h = figure;
set(h, 'Position', [200, 200, 280*4, 110*4]); % 设置图窗位置和大小(宽度1120,高度440)
作用说明:
调整图窗尺寸,适应不同显示需求。
数据处理与表格
11. 使用inputParser实现函数变量输入限制
重点推荐!!! 掌握了这个方法,你就可以像Matlab自带的函数那样,使用一个提示词去传参数给函数!
varparse = inputParser;
% 添加参数及默认值
varparse.addParameter('winsize', 1);
varparse.addParameter('mask', []);
varparse.addParameter('color', [0 0.4470 0.7410]);
% 解析传入的参数列表
varparse.parse(varargin{:});
% 获取解析结果
winsize = varparse.Results.winsize;
mask = varparse.Results.mask;
colormat = varparse.Results.color;
作用说明:
inputParser方便地管理函数的可选参数和默认值,增强代码健壮性,避免参数错误。
12. 创建并初始化表格数据结构
重点推荐2!!! 我习惯用table来记录实验中的数据,可以用提示词去访问相应的变量
sz = [10 8]; % 表格大小:10行8列
varTypes = {'double','double','double','double','double','double','double','string'};
varNames = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
% 创建空表格
ResultTable = table('Size', sz, 'VariableTypes', varTypes, 'VariableNames', varNames);
作用说明:
利用table函数预先定义表格格式,便于后续数据填充和管理,适合大型数据处理。
13. 创建复杂表格并赋值(含字符串和数组)
% 定义大小和变量类型
sz = [1 5];
varTypes = {'cell','cell','cell','cell','cell'};
varNames = {'球平板三面角','水平二面角','水平偶极子','左螺旋','右螺旋'};
% 创建表格
Stand_Scatter = table('Size', sz, 'VariableTypes', varTypes, 'VariableNames', varNames);
% 赋值,cell中存储数组
Stand_Scatter.("球平板三面角") = {[1 0 0 1]};
Stand_Scatter.("水平二面角") = {[1 0 0 -1]};
Stand_Scatter.("水平偶极子") = {[1 0 0 0]};
Stand_Scatter.("左螺旋") = {[1 1j 1j -1]};
Stand_Scatter.("右螺旋") = {[1 -1j -1j -1]};
作用说明:
表格不仅能存储数值,还能存储复杂数组和字符串,方便管理多维数据。
14. 读取Excel文件为table变量
ROI_Dense_table = readtable(path_name, "Sheet", sheet_name{1}, "Range", 'A:M', 'PreserveVariableNames', true);
ROI_Dense_table.Properties.VariableNames = varNames(1:13);
作用说明:
方便地导入Excel数据到Matlab表格变量,支持后续数据分析。
15. 矩阵边界填充示例
padarray(origin, [0 2], 4); % 在左右两侧各填充2列,填充值为4
作用说明:
用于图像或矩阵边缘扩展,方便卷积或边界处理。
性能优化与运行控制
16. 计时代码段,测量函数执行时间
T_start = clock; % 记录起始时间
[clabel, NumSup] = func(img, ImgAttr); % 运行主函数
T_end = clock; % 记录结束时间
time_segment = etime(T_end, T_start); % 计算耗时(秒)
fprintf('耗时:%.3f 秒
', time_segment);
作用说明:
用clock和etime测量代码段执行时间,有助于性能调优。
17. 固定随机数种子,保证结果可复现
rng(1);
作用说明:
设置随机数种子,确保每次运行结果一致,方便调试。
文件操作与图像保存
18. 高效保存图片且不弹出图形窗口
set(gcf, 'Visible', 'off'); % 当前图窗隐藏
figure('Visible', 'off'); % 新建不可见图窗
set(gca, 'position', [0.001 0.001 1 1]); % 设置坐标轴位置填满图窗
imshow(img, 'border', 'tight', 'initialmagnification', 'fit'); % 显示图片
hold on;
plot(1, 2);
% 高分辨率保存为TIFF格式
print(gcf, [savepath, 'aaa', channel_name, standarTypeName, '-', num2str(i_ind)], '-r600', '-dtiff');
close all; % 关闭所有图窗,释放内存
作用说明:
通过隐藏图形窗口实现批量图像处理时节省资源,避免弹窗干扰。可自定义分辨率和格式保存图像。
19. 创建文件夹(若不存在则新建)
if ~isdir('111')
mkdir('111');
end
作用说明:
避免因文件夹不存在导致写入失败,保证批处理时路径正确。
20. Matlab函数中处理缺省参数示范
if nargin == 4
isdisplay = 0;
winsize = 1;
reduce_ratio = 0.95;
mask = [];
elseif nargin == 6
reduce_ratio = 0.95;
circle_coe = 0.97;
mask = [];
elseif nargin < 4 || nargin > 9
error('Invalid input number!');
end
作用说明:
根据输入参数个数动态设置缺省值,增强函数灵活性和容错性。
21. 变量保存示例
save([add_feature_Save_Route 'data.mat'], 'data');
作用说明:
将变量保存为.mat文件,方便后续加载和复用。
22. 图窗保存与打开
savefig([savepath, 'path', 'path', channel_name, '-', '-', standarTypeName]);
openfig('D:picture.fig', 'visible');
set(gcf, 'menubar', 'figure'); % 显示图窗菜单栏
作用说明:
保存当前图窗为.fig格式,支持后续编辑和查看。
动态图像处理
23. 制作GIF动画文件示例
filename = 'data.gif'; % 保存文件名
for i = 1:10
figure;
a = i;
plot(1:100, a * sin(1:100));
set(gcf, 'visible', 'off'); % 不显示窗口
frame = getframe(gcf);
im = frame2im(frame);
[I, map] = rgb2ind(im, 256); % 转换为索引图像
if i == 1
imwrite(I, map, filename, 'gif', 'Loopcount', inf, 'DelayTime', 0.3);
else
imwrite(I, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 0.3);
end
close(gcf); % 关闭图窗,节省资源
end
作用说明:
动态生成GIF动画,适合演示动态图像或变化过程。
24. 读取GIF指定帧并显示
[A, map] = imread('data.gif', 'Frames', 10); % 读取第10帧
img = ind2rgb(A, map);
figure;
imshow(img);
作用说明:
读取并显示GIF的指定帧,方便对动画内容进行分析和处理。
结束语
以上就是一些实用的Matlab编程小技巧,涵盖了绘图、数据处理、文件操作,有不对的地方请批评指正!!!
暂无评论内容