Отобразите графику в App Designer

Обзор графики App Designer

Многие графические функции в MATLAB® (и тулбоксы MATLAB) имеют аргумент для определения целевых осей или родительского объекта. Этот аргумент является дополнительным в большинстве контекстов, но когда вы вызываете эти функции в App Designer, необходимо задать этот аргумент. Причина состоит в том что, в большинстве контекстов, значений по умолчанию MATLAB к использованию gcf или gca функции, чтобы получить целевой объект для операции. Но эти функции зависят от HandleVisibility свойство родительской фигуры, являющейся 'on', и HandleVisibility свойство фигур App Designer установлено в 'off' по умолчанию. Это означает это gcf и gca не работайте нормальными. В результате не используя аргумент для целевые оси или родительский объект могут привести к неожиданным результатам.

В зависимости от графической функции вы вызываете, вы можете должны быть задать:

  • 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 функции, задайте объект осей отобразиться при использовании '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 функция не поддерживает автоматическое изменение размеров. Использовать эту функцию в вашем приложении:

  1. Перетащите компонент панели от Component Library на ваш холст.

  2. Установите AutoResizeChildren свойство панели к 'off'.

  3. Задайте панель как родительский контейнер с помощью 'Parent' аргумент значения имени, когда вы вызываете subplot. Кроме того, задайте выходной аргумент, чтобы сохранить оси.

  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])

Другие обычно используемые функции, которые не поддерживают автоматическое изменение размеров, включают pareto и plotmatrix.

Для получения дополнительной информации о поведении при изменении размера управления, смотрите Альтернативы Автоповедениям при изменении размера По умолчанию.

Неподдерживаемая функциональность

С R2021a некоторая графическая функциональность не поддерживается в App Designer. Эта таблица приводит неподдерживаемую функциональность, которая наиболее относится к рабочим процессам создания приложений.

КатегорияНе поддерживаемый
Анимация movie функция не поддерживается.
Получение и сохранение данных

Эти функции не поддерживаются: hgexport, hgload, hgsave, save, load, savefig, openfig, и saveas.

Вместо saveas функция, используйте exportapp функционируйте, чтобы сохранить содержимое окна приложения. Чтобы сохранить графики в приложении, используйте exportgraphics или copygraphics функции.

Фигуры, созданные программно с uifigure действительно поддержите save, load, savefig, и openfig функции.

Утилиты

clf функция с 'reset' аргумент и print функция не поддерживается.

Вместо print функция, используйте exportapp функционируйте, чтобы сохранить содержимое окна приложения. Чтобы сохранить графики в приложении, используйте exportgraphics или copygraphics функции.

Веб-приложения

Если вы используете App Designer, чтобы создать развернутое веб-приложение (требует MATLAB Compiler™), дополнительные графические ограничения применяются.

Для получения дополнительной информации смотрите Ограничения и Неподдерживаемую функциональность (MATLAB Compiler).

Смотрите также

|

Похожие темы