跳转到内容

MATLAB 编程/句柄/图形句柄

来自维基教科书,开放的书籍,开放的世界

图形句柄

[编辑 | 编辑源代码]

图形本质上是一个窗口,用作一个或多个绘图、UI 控件等的容器。它是您可以创建的第二高级别的对象

要创建图形,请使用 figure 函数,如下所示

>> fhandle = figure;

这将创建一个新的图形窗口,并将所有图形数据存储在变量 fhandle 中。您还可以告诉 MATLAB 在创建图形的同时为其指定任意数量的属性,使用以下语法

>> fhandle = figure('Propertyname1', value1, 'Propertyname2', value2, ...);

有关图形的有效属性名称列表,请参见 文档“图形属性”页面

您可以使用 close 函数以编程方式关闭图形并销毁其句柄

>> close(fhandle);

注意
如果关闭图形,无论是使用 close 函数还是点击“X”,您将无法再访问数据,尝试这样做会导致错误。关闭图形还会销毁对依赖它的轴和注释的所有句柄。

getset 函数

[编辑 | 编辑源代码]

MATLAB 允许您使用 'get' 函数以以下方式获取图形句柄(或实际上任何类型的图形句柄,包括轴、线对象、文本对象等)的任何属性

>> h = figure;
>> propvar = get(h, 'Propertyname');

将存储在变量 propvar 中的具有名称 'Propertyname' 的属性。使用 'get' 函数,您一次只能获取一个属性。

set 函数允许您设置图形和其他图形句柄的任意数量的属性。您可以通过以下方式调用 set 函数来更改任意数量的属性

>> set(h, 'Propname1', propval1, 'Propname2', propval2, ...);

如果您首先创建一个句柄数组,您还可以将相同属性修改为相同的值,用于任意数量的句柄

>> handlevec(1) = figure;
>> handlevec(2) = figure;
>> set(handlevec, 'Name', 'Figure window')

将创建两个新的图形,并为它们都赋予相同的标题:“图形窗口”。

有关图形属性的有效属性名称和值的列表,请参见文档。

即使您没有将图形分配给变量,您仍然可以使用内部 MATLAB 变量 gcf 来访问它。这主要为了方便,因此您不必将图形句柄从一个函数传递到另一个函数来进行修改。但是,由于下面的警告,您在使用 gcf 时必须非常小心,以确保您在有多个图形程序的情况下修改了正确的图形

要获取当前图形的当前属性列表,请使用以下语法

>> get(gcf)

您还可以使用以下方法获取或设置特定属性

>> get(gcf, 'propertyname');
>> set(gcf, 'propertyname', value);

有关有效的图形属性名称及其值的格式,请参见 文档“图形属性”页面

保存图形内容

[编辑 | 编辑源代码]

要保存图形的整个内容,请使用 saveas 函数

>> saveas(fhandle, 'X.fig');

将保存句柄为 fhandle 的图形的内容为 X.fig。.fig 文件可以在以后手动打开和编辑,尽管以编程方式以一致的方式打开和重新编辑它们通常很困难。

您还可以使用 saveas 函数保存图像格式,例如 .jpg、.tif、.bmp、.png 等。saveas 函数本质上是图形窗口本身中“文件 -> 另存为...”选项的命令行版本,但可能存在一些分辨率差异。使用这两种保存图形到文件的方法,生成的图像的质量通常不足以用于出版物等目的。

如果需要图形的高质量版本,可以使用 MATLAB 的 print 函数将图形打印到矢量格式(例如 Adobe Illustrator 的格式,使用 -dill 标志获取)或使用指定分辨率的栅格格式(例如,使用两个标志 -dpng 和 -r300 将告诉 MATLAB 将图形打印到 300dpi 的 PNG 文件)。有关支持的输出格式的更多详细信息,请参见该函数的文档 此处

作为 MATLAB 的 print 函数的替代方案,可以使用 MATLAB 的贡献者中心提供的 plot2svg 函数从许多图形(不仅仅是 Simulink 模型)获取 SVG 文件(可从 这里 获取)。可以使用免费软件工具(如 Inkscape)编辑 SVG 文件,也可以在 Illustrator 中打开。

华夏公益教科书