exponenta event banner

Отображение графики в 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 в качестве целевого объекта графической функции. При перетаскивании компонента осей из библиотеки компонентов на холст создается UIAxes объект в приложении. Имя по умолчанию для объекта осей App Designer: 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 Designer имеет объект фигуры по умолчанию app.UIFigure, который является контейнером для компонентов, составляющих главное окно приложения. Определить app.UIFigure в качестве аргумента родительского контейнера для отображения графики в главном окне приложения. Например, чтобы создать тепловую карту в приложении, используйте следующий синтаксис:

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

Чтобы упорядочить и разделить графику, использующую входной аргумент родительского контейнера, перетащите компонент контейнера, такой как панель, вкладка или компоновка сетки, из библиотеки компонентов на холст. Определите имя компонента, выбрав его и просмотрев его имя в обозревателе компонентов. Затем можно указать этот контейнер в качестве родительского при вызове графической функции.

Другие часто используемые графические функции, которые принимают родительский контейнер в качестве входных данных, включают annotation, geobubble, parallelplot, scatterhistogram, stackedplot, и wordcloud.

Программное создание осей

Некоторые графические функции отображают данные на специализированных осях. Например, функции, отображающие полярные данные, должны делать это на PolarAxes объект. В отличие от этого, UIAxes объекты, которые можно добавить в приложение из библиотеки компонентов, необходимо добавить специализированные оси в приложение программно в коде. Чтобы программно создать объект axes, создайте StartupFcn Обратный вызов приложения. В нем вызовите соответствующую графическую функцию и укажите родительский контейнер в приложении в качестве цели.

График на полярных осях

Функции, такие как polarplot, polarhistogram, и polarscatter взять объект полярных осей в качестве цели. Создайте полярные оси программным путем, вызвав polaraxes функция. Например, для печати полярного уравнения на панели сначала перетащите компонент панели из библиотеки компонентов на холст. В коде приложения создайте объект полярных осей, вызвав 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'. Это свойство можно задать на вкладке «Инспектор» обозревателя компонентов или в коде.

Например, subplot функция не поддерживает автоматическое изменение размеров. Чтобы использовать эту функцию в приложении, выполните следующие действия.

  1. Перетащите компонент панели из библиотеки компонентов на холст.

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

См. также

|

Связанные темы