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

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

Многие графические функции в 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 функция не поддерживает автоматическое изменение размера. Чтобы использовать эту функцию в вашем приложении:

  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 function, использовать exportapp функция для сохранения содержимого окна приложения. Чтобы сохранить графики в приложении, используйте exportgraphics или copygraphics функций.

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

Утилиты

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

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

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

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

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

См. также

|

Похожие темы