Main Content

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

在 App 设计工具中显示图形

App 设计工具图形概述

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

根据您调用的图形函数,您可能需要:

  • 在画布上指定一个 UIAxes 组件

  • 在 App 中指定一个父容器

  • 在 App 代码中指定一个以编程方式创建的坐标区组件

可以通过多种方式来指定图形函数的目标组件。下面给出了一些最常见语法的示例。要在您的上下文中确定正确的目标和语法,请参阅您所使用的特定图形函数的文档。

在现有坐标区上显示图形

在 App 设计工具中显示图形的最常见方式是在 App 设计工具画布上指定一个 UIAxes 对象作为图形函数目标。当您将坐标区组件从组件库拖到画布上时,便会在您的 App 中创建一个 UIAxes 对象。App 设计工具坐标区对象的默认名称是 app.UIAxes。要确定或更改画布上特定坐标区的名称,请选择坐标区组件。其名称会在组件浏览器中列出并可进行编辑。

将坐标区指定为第一个参数

许多图形函数都有一个可选的第一个输入参数,用于指定目标坐标区对象。例如,plot 函数和 hold 函数都以这种方式获取目标坐标区对象。要在画布上的一个坐标区上绘制两个线条,请将坐标区对象的名称指定为您调用的每个函数的第一个参数。

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

将坐标区指定为名称-值参数

一些图形函数要求将目标坐标区对象指定为名称-值参数。例如,当您调用 imshowtriplot 函数时,请使用 'Parent' 名称-值参数指定要显示的坐标区对象。以下代码在画布上的一个现有坐标区上显示图像:

imshow('peppers.png','Parent',app.UIAxes);

在容器中显示图形

一些图形函数显示在容器组件(如图窗、面板或网格布局)中,而不是坐标区对象中。例如,heatmap 函数有一个可选的第一个参数,用于指定将在其中显示图的容器。

在 App 设计工具中创建的每个 App 都有一个默认命名为 app.UIFigure 的图窗对象,它是组成 App 主窗口的各组件的容器。将 app.UIFigure 指定为父容器参数,以便在 App 主窗口中显示图形。例如,要在 App 中创建热图,请使用以下语法:

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

要进一步组织和划分接受父容器输入参数的图形,请将面板、选项卡或网格布局等容器组件从组件库拖到画布上。通过选择组件并在组件浏览器中查看其名称来确定组件的名称。然后,您可以在调用图形函数时将此容器指定为父容器。

接受父容器作为输入的其他常用图形函数包括 annotationgeobubbleparallelplotscatterhistogramstackedplotwordcloud

以编程方式创建坐标区

有些图形函数需要在专用坐标区上绘制数据图。例如,绘制极坐标数据图的函数必须在 PolarAxes 对象上进行绘制。与可从组件库添加到 App 中的 UIAxes 对象不同,您必须在代码中以编程方式将专用坐标区添加到 App 中。要以编程方式创建坐标区对象,请为您的 App 创建一个 StartupFcn 回调。在该回调中调用适当的图形函数并将 App 中的父容器指定为目标。

在极坐标区上绘图

polarplotpolarhistogrampolarscatter 等函数接受极坐标区对象作为目标。通过调用 polaraxes 函数以编程方式创建极坐标区。例如,要在面板中绘制极坐标方程,请首先将面板组件从组件库拖到画布上。在 App 代码中,调用 polaraxes 函数并将面板指定为父容器来创建极坐标区对象。然后,使用 polarplot 函数绘制方程图,将极坐标区指定为目标坐标区。

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

在地理坐标区上绘图

geoplotgeoscattergeodensityplot 等函数接受地理坐标区对象作为目标。通过调用 geoaxes 函数以编程方式创建地理坐标区。例如,要在面板中绘制地理数据图,请使用以下代码:

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

创建分块图布局

要使用 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)

使用不带目标参数的函数

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

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

使用不支持自动调整大小的函数

默认情况下,App 设计工具图窗可调整大小。这意味着当您运行 App 并调整图窗窗口大小时,图窗中的组件会自动调整大小并重新定位以适应图窗。但是,有些图形函数不支持自动调整大小。要在 App 设计工具中使用这些函数,请创建一个面板来显示这些函数的输出,并将面板的 AutoResizeChildren 属性设置为 'off'。可以在组件浏览器检查器选项卡中或在代码中设置此属性。

例如,subplot 函数不支持自动调整大小。要在您的 App 中使用此函数,请执行下列步骤:

  1. 将一个面板组件从组件库拖到画布上。

  2. 将面板的 AutoResizeChildren 属性设置为 'off'

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

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

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

不支持自动调整大小的其他常用函数包括 paretoplotmatrix

有关管理调整大小行为的详细信息,请参阅默认自动调整大小行为的替代方法

不支持的功能

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

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

不支持这些函数:hgexporthgloadhgsavesaveloadsavefigopenfigsaveas

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

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

实用工具

不支持带 'reset' 参数的 clf 函数和 print 函数。

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

Web App

如果您使用 App 设计工具来创建一个预部署 Web App(需要 MATLAB Compiler™),则存在其他图形限制。

有关详细信息,请参阅Web App Limitations and Unsupported Functionality (MATLAB Compiler)

另请参阅

|

相关主题