Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

在 App 设计工具中显示图形

在 App 设计工具中显示图形需要的工作流与通常在 MATLAB® 命令行中使用的工作流不同。了解此工作流和一些特殊情况后,您就会知道如何调用显示绝大多数类型的图所需要的函数。

调用图形函数

MATLAB(和 MATLAB 工具箱)中的许多图形函数都有一个参数用于指定目标坐标区或父对象。此参数大多数情况下是可选的,但在 App 设计工具中调用这些函数时,必须指定此参数。原因是,在大多数情况下,MATLAB 默认使用 gcfgca 函数来获取操作的目标对象。但是,默认情况下,App 设计工具图窗的 HandleVisibility 属性设置为 'off'。这意味着 gcf 不返回 App 设计工具图窗,gca 不返回 App 设计工具图窗中的任何坐标区。因此,对目标坐标区或父对象省略该参数可能会产生意外的结果。

以下代码说明如何在绘制两个线条时指定目标坐标区。传递给 plothold 的第一个参数是 app.UIAxes,这是 App 设计工具坐标区的默认名称。

plot(app.UIAxes,[1 2 3 4],'-r');
hold(app.UIAxes);
plot(app.UIAxes,[10 9 4 7],'--b');

同样,您可以通过将第一个参数指定为 app.UIFigure 来指定目标图窗。例如,以下代码会在 App 设计工具图窗中创建箭头注释。

x = [0.3 0.5];
y = [0.6 0.5];
annotation(app.UIFigure,'arrow',x,y)

有些函数(例如 imshowtriplot)需要使用名称-值对组参数来指定目标对象。例如,以下代码说明如何在 App 设计工具中调用 imshow 函数。

imshow('peppers.png','Parent',app.UIAxes);
将目标对象指定为第一个参数还是名称-值对组参数取决于函数。请参阅要使用的具体函数的文档,以确定相应的参数。

ginputgtext 函数没有用于指定目标图窗的参数。因此,在调用这些函数之前,您必须将 App 设计工具图窗的 HandleVisibility 属性设置为 'callback''on'。在调用这些函数后,您可以将 HandleVisibility 属性设置回 'off'。例如,以下代码说明如何定义一个允许您使用 ginput 函数来识别两点坐标的回调函数。

function pushButtonCallback(app,event) 
    app.UIFigure.HandleVisibility = 'callback';
    ginput(2)
    app.UIFigure.HandleVisibility = 'off';
end

有些函数不支持自动调整大小行为,包括 paretoplotmatrixsubplot。在使用这些函数之前,请将父容器的 AutoResizeChildren 属性设置为 'off'

app.UIFigure.AutoResizeChildren = 'off';
pareto(app.UIAxes,[10 20 40 40])

使用其他类型的坐标区显示图

您可以使用 App 设计工具坐标区(uiaxes 对象)创建大多数二维图和三维图。从 R2018b 开始,您将能够创建更多图,例如下表中列出的这些图。这些图大多数都要求在 App 中使用不同类型的父对象并另行添加代码。所有这些图默认情况下都使用归一化位置单位。

函数编码详细信息
polarplot
polarhistogram
polarscatter
compass

通过调用 polaraxes 函数创建极坐标区。将父容器指定为第一个输入参数(例如 app.Panel)。然后将极坐标区作为第一个参数,调用绘图函数。例如:

theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
pax = polaraxes(app.Panel);
polarplot(pax,theta,rho)

或者,以类似的方式创建一个罗盘图:

M = randn(20,20);
Z = eig(M);
app.Axes = axes(app.Panel);
compass(app.Axes,Z)

subplot

执行下列步骤:

  1. 将父容器的 AutoResizeChildren 属性设置为 'off'。子图不支持自动调整大小行为。可以在 App 设计工具的组件浏览器中的检查器选项卡中或在代码中设置此属性。

  2. 调用 subplot 时,使用 'Parent' 名称-值对组参数指定父容器。此外,还要指定输出参数以存储坐标区。

  3. 将坐标区作为第一个参数,调用绘图函数。

例如:

app.UIFigure.AutoResizeChildren = 'off';
ax1 = subplot(1,2,1,'Parent',app.UIFigure);
ax2 = subplot(1,2,2,'Parent',app.UIFigure);
plot(ax1,[1 2 3 4])
plot(ax2,[10 9 4 7])

tiledlayout

使用 nexttile 函数在面板中创建一个分块图布局并在其中创建坐标区。从 nexttile 函数返回坐标区对象,并使用它指定图或绘图的坐标区。

t = tiledlayout(app.Panel,2,1);
[X,Y,Z] = peaks(20)

% Tile 1
ax1 = nexttile(t);
surf(ax1,X,Y,Z)

% Tile 2
ax2 = nexttile(t);
contour(ax2,X,Y,Z)

geobubble
heatmap
parallelplot
scatterhistogram
stackedplot
wordcloud

调用这些函数时指定父容器(例如 app.UIFigure)。

例如:

h = heatmap(app.UIFigure,rand(10));

geoplot
geoscatter
geodensityplot

通过调用 geoaxes 函数创建地理坐标区。将父容器指定为第一个输入参数(例如 app.UIFigure)。然后,将坐标区作为第一个输入参数,调用绘图函数。例如:

latSeattle = 47 + 37/60;
lonSeattle = -(122 + 20/60);
gx = geoaxes(app.UIFigure);
geoplot(gx,latSeattle,lonSeattle)

不支持的功能

从 R2020b 开始,App 设计工具不再支持某些图形功能。下表列出了与大多数 App 构建工作流相关的功能。

类别不支持
动画
检索和保存数据

请不要使用 saveas 函数,而是使用 exportapp 函数保存 App 窗口的内容。要在 App 中保存图,请使用 exportgraphicscopygraphics 函数。

使用 uifigure 以编程方式创建的图窗支持 saveloadsavefigopenfig 函数。

实用工具

请不要使用 print 函数,而是使用 exportapp 函数保存 App 窗口的内容。要在 App 中保存图,请使用 exportgraphicscopygraphics 函数。

不推荐使用的函数
属性
  • TableMenuPanelTabTabGroupButtonGroup 等组件对象在 App 设计工具中所支持的属性不同于在使用 figure 函数创建的 App 中所支持的属性。有关 App 设计工具支持的组件的列表及其属性页的链接,请参阅 App 构建组件

另请参阅

|

相关主题