第一次接触Matlab的rectangle函数时,我正需要为论文绘制一组实验装置的示意图。这个看似简单的函数,实际上藏着不少惊喜。rectangle函数是Matlab中用于绘制矩形的基础函数,但它能做的远不止画个方框那么简单。
让我们从最基本的语法开始。要在坐标(1,2)处绘制一个宽5高6的矩形,代码简单得令人惊讶:
matlab复制rectangle('Position',[1 2 5 6])
这里的Position参数是一个四元向量[x y w h],分别表示矩形左下角的x、y坐标,以及宽度和高度。我刚开始使用时经常搞混顺序,后来发现一个记忆技巧:想象自己在电脑屏幕上拖拽绘制矩形,先确定起点(x,y),再决定拉多宽(w)多高(h)。
这个基础用法虽然简单,但已经能满足很多基本需求。比如我经常用它来绘制流程图中的方框,或者标记图像中的感兴趣区域。不过rectangle真正的强大之处在于它的可选参数,这也是我们接下来要深入探讨的内容。
第一次发现rectangle函数可以画圆角矩形时,我简直像发现了新大陆。通过Curvature参数,我们可以轻松实现从直角矩形到完全圆形的各种变形。
Curvature参数接受两种形式的输入:
举个例子,要画一个略带圆角的矩形:
matlab复制rectangle('Position',[0 0 4 2],'Curvature',0.3)
这个0.3的曲率值意味着矩形的边会有30%的弯曲。当我第一次尝试这个参数时,发现曲率值从0(直角)到1(最大曲率)的变化过程特别有趣。当曲率达到1时,神奇的事情发生了:
matlab复制rectangle('Position',[2 4 2 2],'Curvature',[1 1])
axis equal
这段代码会画出一个完美的圆形!这是因为当水平和垂直曲率都达到最大值时,矩形就变成了内切椭圆。如果Position定义的宽度和高度相等,自然就得到了圆形。
在实际科研绘图中,我经常用这个特性来绘制圆形标记或者气泡图。比起用专门的圆形绘制函数,rectangle的这种用法更加灵活,因为我们可以通过调整Position来轻松控制圆形的位置和大小。
科研绘图不仅要求准确,美观也同样重要。rectangle函数提供了丰富的属性来控制图形的外观,让你的图表从"能用"升级到"好看"。
最常用的几个美化属性包括:
比如要画一个蓝边绿底的矩形:
matlab复制rectangle('Position',[1 1 3 2],...
'FaceColor','g',...
'EdgeColor','b',...
'LineWidth',2)
颜色不仅可以用预定义的颜色名(如'r'代表红色),还可以用RGB三元组来精确控制:
matlab复制rectangle('Position',[1 1 3 2],...
'FaceColor',[0.5 0.5 0.5],...
'EdgeColor',[0 0.8 0],...
'LineWidth',1.5)
这里[0.5 0.5 0.5]表示中灰色,[0 0.8 0]是一种亮绿色。通过调整这些RGB值,你可以实现任何想要的颜色效果。
线型的选择也很重要。在绘制示意图时,我经常用不同线型来区分不同类型的边界:
matlab复制% 实线矩形
rectangle('Position',[1 1 2 1],'LineStyle','-')
% 虚线矩形
rectangle('Position',[1 3 2 1],'LineStyle','--')
% 点线矩形
rectangle('Position',[1 5 2 1],'LineStyle',':')
当你需要绘制大量相似图形或者后期调整图形属性时,直接操作rectangle对象会非常高效。rectangle函数可以返回一个图形对象句柄,通过这个句柄我们可以随时修改图形属性。
比如先创建一个矩形并保存其句柄:
matlab复制r = rectangle('Position',[0 0 1 1]);
然后可以随时修改它的各种属性:
matlab复制r.Position = [0.5 0.5 2 1]; % 改变位置和大小
r.FaceColor = 'y'; % 改为黄色填充
r.Curvature = 0.4; % 添加圆角
这种面向对象的操作方式特别适合需要反复调整的图形。在我的一个实验数据可视化项目中,我需要根据用户输入动态调整一组矩形的位置和颜色,使用对象句柄让这个任务变得非常简单。
批量创建多个矩形时,可以结合循环和句柄数组:
matlab复制figure
hold on
rects = gobjects(1,5); % 预分配图形对象数组
for i = 1:5
rects(i) = rectangle('Position',[i 0 0.8 2],...
'FaceColor',[i/5 0 0]);
end
这段代码会创建5个红色渐变的矩形。通过预分配图形对象数组,我们可以有效管理大量图形对象。
让我们通过几个实际科研绘图案例,看看rectangle函数如何解决真实问题。
案例1:微流控芯片示意图
在绘制微流控芯片设计图时,我需要精确表示各种通道和腔室。通过组合不同曲率的矩形,可以轻松构建复杂的微流控结构:
matlab复制% 主通道
rectangle('Position',[1 3 8 0.5],'Curvature',[1 1],'FaceColor',[0.8 0.8 1])
% 圆形反应室
rectangle('Position',[5 1.5 2 2],'Curvature',[1 1],'FaceColor',[0.9 0.9 1])
% 连接通道
rectangle('Position',[5 3 0.3 1.5],'FaceColor',[0.8 0.8 1])
rectangle('Position',[6.7 3 0.3 1.5],'FaceColor',[0.8 0.8 1])
axis equal
xlim([0 10])
ylim([0 5])
案例2:材料结构示意图
在材料科学研究中,经常需要表示多层结构。通过控制矩形的填充和边框属性,可以清晰展示不同材料层的堆叠:
matlab复制% 基底
rectangle('Position',[0 0 5 1],'FaceColor',[0.6 0.6 0.6])
% 中间层
rectangle('Position',[0 1 5 0.5],'FaceColor',[0.8 0.5 0.2])
% 顶层
rectangle('Position',[0 1.5 5 0.2],'FaceColor',[0.2 0.2 0.8])
% 标注
text(2.5,0.5,'基底','HorizontalAlignment','center')
text(2.5,1.25,'过渡层','HorizontalAlignment','center')
text(2.5,1.6,'功能层','HorizontalAlignment','center')
在使用rectangle函数绘制大量图形时,性能可能会成为问题。以下是我总结的几个优化技巧:
批量绘制优于逐个绘制:尽量一次性设置好所有属性,而不是创建后逐个修改。
合理使用hold状态:在绘制多个图形时,先调用hold on可以避免重复创建坐标区。
简化复杂图形:对于特别复杂的图形,考虑使用patch函数替代多个rectangle。
常见问题及解决方案:
问题1:图形显示不全或位置不对
问题2:圆形看起来像椭圆
axis equal命令使坐标轴比例一致问题3:图形属性修改无效
matlab复制% 错误示例:属性名拼写错误
r = rectangle('Position',[0 0 1 1]);
r.facecolor = 'r'; % 应该是FaceColor
% 正确示例
r = rectangle('Position',[0 0 1 1]);
r.FaceColor = 'r';
rectangle函数很少单独使用,通常需要与其他Matlab绘图函数配合。以下是一些常见组合:
与text函数配合添加标注
matlab复制rectangle('Position',[1 1 2 1],'FaceColor','y')
text(2,1.5,'重要区域','HorizontalAlignment','center')
与plot函数配合创建复杂图形
matlab复制% 绘制矩形边框
rectangle('Position',[1 1 3 2],'LineWidth',2)
% 在矩形内添加数据点
hold on
plot([1.5 2.5 3.5],[1.5 2 1.8],'ro')
与fill函数配合创建更复杂的填充图形
当需要绘制非矩形形状时,可以结合rectangle和fill函数:
matlab复制% 用rectangle绘制主体
rectangle('Position',[1 1 4 2],'FaceColor',[0.8 0.8 1])
% 用fill添加特殊形状
fill([3 4 5 4],[3 2.5 3 3.5],'r')
这种组合方式在创建信息图表时特别有用,可以充分发挥不同绘图函数的优势。