Многие графические функции в MATLAB® (и тулбоксы MATLAB) имеют аргумент для определения целевых осей или родительского объекта. Этот аргумент является необязательным в большинстве контекстов, но при вызове этих функций в App Designer необходимо задать этот аргумент. Причина в том, что в большинстве контекстов MATLAB по умолчанию использует gcf
или gca
функций для получения целевого объекта для операции. Но эти функции зависят от HandleVisibility
свойство родительского рисунка 'on'
, и HandleVisibility
свойство рисунков App Designer установлено в 'off'
по умолчанию. Это означает, что gcf
и gca
не работают как обычно. В результате опускание аргумента для целевой оси или родительского объекта может привести к неожиданным результатам.
В зависимости от вызываемой графической функции, вам может потребоваться задать:
A UIAxes
компонент на холсте
Родительский контейнер в вашем приложении
Компонент оси, который вы создаете программно в коде приложения
Существует несколько способов задать целевой компонент для графической функции. Некоторые примеры наиболее распространенных синтаксисов приведены ниже. Чтобы определить правильную цель и синтаксис в вашем контексте, смотрите документацию для конкретной графической функции, которую вы используете.
Наиболее распространенный способ отображения графики в App Designer состоит в том, чтобы задать UIAxes
объект на холсте App Designer как цель графической функции. Когда вы перетаскиваете компонент осей из Component Library на холст, это создает UIAxes
объект в приложении. Имя по умолчанию для объекта осей App Designer app.UIAxes
. Чтобы определить или изменить имя определенной оси на холсте, выберите компонент осей. Его имя указано и может быть отредактировано в Component Browser
Многие графические функции имеют необязательный первый входной параметр, чтобы задать целевой объект осей. Для примера и то, и другое plot
функции и hold
функция принимает целевой объект осей таким образом. Чтобы построить график двух линий на наборе осей на холсте, задайте имя объекта осей в качестве первого аргумента для каждой вызываемой функции.
plot(app.UIAxes,[1 2 3 4],'-r'); hold(app.UIAxes); plot(app.UIAxes,[10 9 4 7],'--b');
Некоторые графические функции требуют, чтобы целевой объект осей было задаваем как аргумент имя-значение. Для примера, когда вы вызываете imshow
и triplot
functions, задайте объект осей для отображения с помощью 'Parent'
аргумент имя-значение. Этот код отображает изображение на существующем наборе осей на вашем холсте:
imshow('peppers.png','Parent',app.UIAxes);
Некоторые графические функции отображаются в компоненте контейнера, такой как рисунок, панель или размещение сетки, вместо объекта осей. Для примера, heatmap
функция имеет необязательный первый аргумент для определения контейнера, в котором будет отображаться график.
Каждое приложение App Designer имеет объект рисунка, по умолчанию именованный app.UIFigure
, это контейнер для компонентов, которые составляют основное окно приложения. Задайте app.UIFigure
как родительский аргумент контейнера для отображения графики в главном окне приложения. Для примера, чтобы создать тепловую карту в вашем приложении, используйте этот синтаксис:
h = heatmap(app.UIFigure,rand(10));
Чтобы дополнительно организовать и разделить графику, которая принимает родительский входной параметр контейнера, перетащите компонент контейнера, такой как панель, вкладка или размещение сетки из Component Library на холст. Определите имя компонента путем его выбора и просмотра его имени в Component Browser. Затем можно задать этот контейнер как родительский элемент при вызове графической функции.
Другие обычно используемые графические функции, которые берут родительский контейнер как вход, включают annotation
, geobubble
, parallelplot
, scatterhistogram
, stackedplot
, и wordcloud
.
Некоторые графические функции строят графики данных на специализированных осях. Для примеров функции, которые строят график полярных данных, должны делать это на PolarAxes
объект. В отличие от UIAxes
объекты, которые вы можете добавить к своему приложению из Component Library, вы должны добавить специализированные оси к своему приложению программно в вашем коде. Чтобы создать объект осей программно, создайте StartupFcn
коллбэк для вашего приложения. В нем вызовите соответствующую графическую функцию и укажите родительский контейнер в вашем приложении в качестве целевого.
Функции, такие как polarplot
, polarhistogram
, и polarscatter
взять объект полярных осей как цель. Создайте полярные оси программно путем вызова polaraxes
функция. Например, чтобы построить полярное уравнение на панели, сначала перетащите компонент панели из Component Library на холст. В коде для вашего приложения создайте объект полярных осей, вызвав 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
, не имеют аргумента для определения целевого объекта. В результате необходимо задать HandleVisibility
свойство рисунка App Designer, чтобы 'callback'
или 'on'
перед вызовом этих функций. После вызова этих функций можно задать HandleVisibility
свойство назад в 'off'
. Например, этот код показывает, как задать коллбэк, который позволяет вам идентифицировать координаты двух точек, используя ginput
функция.
function pushButtonCallback(app,event) app.UIFigure.HandleVisibility = 'callback'; ginput(2) app.UIFigure.HandleVisibility = 'off'; end
Рисунки App Designer по умолчанию могут быть изменены. Это означает, что при запуске приложения и изменении размера окна рисунка компоненты на рисунке автоматически изменяются в размере и изменяются в соответствии. Однако некоторые графические функции не поддерживают автоматическое изменение размера. Чтобы использовать эти функции в App Designer, создайте панель, в которой можно отобразить выход функции и задать AutoResizeChildren
свойство панели, чтобы 'off'
. Вы можете задать это свойство на вкладке Inspector Component Browser или в вашем коде.
Для примера, subplot
функция не поддерживает автоматическое изменение размера. Чтобы использовать эту функцию в вашем приложении:
Перетащите компонент панели из Component Library на холст.
Установите AutoResizeChildren
свойство панели, чтобы 'off'
.
Укажите панель как родительский контейнер, используя 'Parent'
аргумент имя-значение при вызове subplot
. Кроме того, укажите выходной аргумент для хранения осей.
Вызовите функцию построения графика с осями в качестве первого входного параметра.
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
.
Дополнительные сведения об управлении поведением при изменении размера см. в разделе Альтернативы поведению при автоматическом изменении размера по умолчанию.
Начиная с R2021a, некоторые графические функции не поддерживаются в App Designer. В этой таблице перечислены неподдерживаемые функциональные возможности, которые наиболее актуальны для рабочих процессов создания приложений.
Категория | Не поддерживается |
---|---|
Анимация | movie функция не поддерживается. |
Получение и сохранение данных | Эти функции не поддерживаются: Вместо Фигуры, созданные программно с |
Утилиты | Вместо |
Веб- Приложения | Если вы используете App Designer для создания развёрнутого веб- приложения (требует MATLAB Compiler™), применяются дополнительные графические ограничения. Для получения дополнительной информации см. «Ограничения и неподдерживаемая функциональность» (MATLAB Compiler). |
Свойства фигуры пользовательского интерфейса | Свойства UIAxes