在 App 设计工具中显示图形
App 设计工具图形概述
MATLAB®(和 MATLAB 工具箱)中的许多图形函数都有一个参量用于指定目标坐标区或父对象。此参量大多数情况下是可选的,但在 App 设计工具中调用这些函数时,必须指定此参量。原因是,在大多数情况下,MATLAB 默认使用 gcf
或 gca
函数来获取操作的目标对象。但是,这些函数需要父图窗的 HandleVisibility
属性为 'on'
时才起作用,而默认情况下 App 设计工具图窗的 HandleVisibility
属性设置为 'off'
。这意味着此时 gcf
和 gca
不能正常工作。因此,对目标坐标区或父对象省略该参量可能会产生意外的结果。
根据您调用的图形函数,您可能需要:
在画布上指定一个
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');
将坐标区指定为名称-值参量
一些图形函数要求将目标坐标区对象指定为名称-值参量。例如,当您调用 imshow
和 triplot
函数时,请使用 'Parent'
名称-值参量指定要显示的坐标区对象。以下代码在画布上的一个现有坐标区上显示图像:
imshow('peppers.png','Parent',app.UIAxes);
在容器中显示图形
一些图形函数显示在容器组件(如图窗、面板或网格布局)中,而不是坐标区对象中。例如,heatmap
函数有一个可选的第一个参量,用于指定将在其中显示图的容器。
在 App 设计工具中创建的每个 App 都有一个默认命名为 app.UIFigure
的图窗对象,它是组成 App 主窗口的各组件的容器。将 app.UIFigure
指定为父容器参量,以便在 App 主窗口中显示图形。例如,要在 App 中创建热图,请使用以下语法:
h = heatmap(app.UIFigure,rand(10));
要进一步组织和划分接受父容器输入参量的图形,请将面板、选项卡或网格布局等容器组件从组件库拖到画布上。通过选择组件并在组件浏览器中查看其名称来确定组件的名称。然后,您可以在调用图形函数时将此容器指定为父容器。
接受父容器作为输入的其他常用图形函数包括 annotation
、geobubble
、parallelplot
、scatterhistogram
、stackedplot
和 wordcloud
。
以编程方式创建坐标区
有些图形函数需要在专用坐标区上绘制数据图。例如,绘制极坐标数据图的函数必须在 PolarAxes
对象上进行绘制。与可从组件库添加到 App 中的 UIAxes
对象不同,您必须在代码中以编程方式将专用坐标区添加到 App 中。要以编程方式创建坐标区对象,请为您的 App 创建一个 StartupFcn
回调。在该回调中调用适当的图形函数并将 App 中的父容器指定为目标。
在极坐标区上绘图
polarplot
、polarhistogram
和 polarscatter
等函数接受极坐标区对象作为目标。通过调用 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)
在地理坐标区上绘图
geoplot
、geoscatter
和 geodensityplot
等函数接受地理坐标区对象作为目标。通过调用 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)
使用不带目标参量的函数
某些图形函数,如 ginput
和 gtext
,没有用于指定目标的参量。因此,在调用这些函数之前,您必须将 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 中使用此函数,请执行下列步骤:
将一个面板组件从组件库拖到画布上。
将面板的
AutoResizeChildren
属性设置为'off'
。调用
subplot
时,使用'Parent'
名称-值参量将面板指定为父容器。此外,还要指定输出参量以存储坐标区。将坐标区作为第一个参量,调用绘图函数。
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])
不支持自动调整大小的其他常用函数包括 pareto
和 plotmatrix
。
有关管理调整大小行为的详细信息,请参阅默认自动调整大小行为的替代方法。
不支持的功能
App 设计工具不再支持某些图形功能。下表列出了与 App 构建工作流最相关的不受支持的功能。
类别 | 不支持 |
---|---|
检索和保存数据 | 不支持这些函数: 请不要使用 使用 |
Web App | 如果您使用 App 设计工具来创建一个预部署 Web App(需要 MATLAB Compiler™),则存在其他图形限制。 有关详细信息,请参阅Web App Limitations and Unsupported Functionality (MATLAB Compiler)。 |