Разбиение графического окна MatLab
Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков:
subplot — создает новые объекты класса axes (подокна);
subplot(m.n.p) или subplot(mnp) — разбивает графическое окно на тхп подокон, при этом m — число подокон по горизонтали, n — число подокон по вертикали, а р— номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам);
subplot(H), где Н — дескриптор для объекта axes, дает альтернативный способ задания подокна для текущего графика;
subplot( ‘position’,[left bottom width height]) — создает подокно с заданными нормализованными координатами (в пределах от 0.0 до 1.0);
subplot(lll) Hclf reset — удаляют все подокна и возвращают графическое окно в обычное состояние.
Рис. 6.42. Четыре графика различного типа, размещенных в подокнах одного окна
Следующий пример иллюстрирует применение команды subplot:
В этом примере последовательно строятся четыре графика различного типа, размещаемых в разных подокнах (рис. 6.42).
Следует отметить, что для всех графиков возможна индивидуальная установка дополнительных объектов, например титульных надписей, надписей по осям и т. д.
Что такое subplot в matlab
Однажды я опубликовал запись с примером нестандартной расстановки графиков в одном окне с помощью функции subplot. Однако некоторые варианты расположения вызывали у меня уныние из-за кучи свободного пространства, тогда как мне требовалось растянуть их на все это пространство. Теперь я разобрался, как это можно сделать.
У каждого subplot кроме основных параметров отвечающих за стандартное расположение рисунков есть дополнительные переменные, указав которые можно всячески настроить Ваш рисунок. В частности параметр ‘OuterPosition’. Он отвечает за расположение вашего рисунка вместе со всеми надписями, будь то шкалы осей, их названия и название самого рисунка.
У ‘OuterPosition’, в свою очередь, есть четыре параметра — left, bottom, width, height. Их необходимо определить для каждого из рисунков. Построение рисунков начинается из нижней левой точки, поэтому первые два параметра и называются «слева», «снизу», следующие два параметра определяют ширину и высоту рисунка и называются соответственно «ширина», «высота».
По умолчанию матлаб принимает значения этих параметров в нормализованном виде, это значит, что диапазон для рисунков должен находиться от 0 до 1. Левый нижний угол будет иметь координаты [0 0], верхний правый угол [1 1]. Приведем пример для квадратного расположения 4 рисунков. По синтаксису матлаба первый рисунков в функции subplot будет находиться в верхнем левом углу, и записываться так: subplot(2,2,1). В выбранном примере матлаб сам построит и расположит рисунки в заданном порядке, однако при разворачивании этого окна по бокам от рисунков останется очень много свободного места, что меня всегда расстраивало. Чтобы это исправить добавим параметр: subplot(2,2,1,’OuterPosition’,[0 0.5 0.5 0.5]). Здесь мы указали, что левый нижний угол рисунка будет находиться в координатах 0 по x и 0.5 по y, а высота и ширина будет равна половине окна, как и для остальных рисунков. Второй рисунок будет так же в верхней части окна, но смещен вправо на ширину первого рисунка. Получаем subplot(2,2,2,’OuterPosition’,[0.5 0.5 0.5 0.5]). Третий и четвертый рисунки будут лежать под первым и вторым соответственно, поэтому измениться лишь один параметр, отвечающий за положение по y.
Код: subplot(2,2,1,’OuterPosition’,[0 0 0.5 0.5]) & subplot(2,2,1,’OuterPosition’,[0.5 0 0.5 0.5]). Данная модификация позволит растянуть графики шире, чем при стандартном построении.
Перейдем к другим примерам.
Пример на основе прошлой записи.
| Было | Стало |
|---|---|
|
figure(1);
subplot(3,3,1,’OuterPosition’,[0 0.67 0.33 0.33])
plot(1,1);
title(‘Строка 1, Столбец 1, Номер 1’);
subplot(3,3,4,’OuterPosition’,[0 0.335 0.33 0.33])
plot(1,1);
title(‘Строка 2, Столбец 1, Номер 4’);
subplot(3,3,7,’OuterPosition’,[0 0 0.33 0.33])
plot(1,1);
title(‘Строка 3, Столбец 1, Номер 7’);
subplot(2,3,2,’OuterPosition’,[0.335 0.5 0.33 0.5])
plot(1,1);
title(‘Строка 1, Столбец 2, Номер 2’);
subplot(2,3,5,’OuterPosition’,[0.335 0 0.33 0.5])
plot(1,1);
title(‘Строка 2, Столбец 2, Номер 5’);
subplot(1,3,3,’OuterPosition’,[0.67 0 0.33 1])
plot(1,1);
title(‘Строка 1, Столбец 3, Номер 3’);
Возьмем следующий. Часто выходит, что есть рисунок для которого не требуется много места, а другие хочется растянуть. По высоте это сделать не проблема, используя стандартные функции, но ширина, всегда проблема.
| Было | Стало |
|---|---|
|
|
Вот как можно исправить эту проблему:
figure
subplot(2,2,1,’OuterPosition’,[0 0.5 0.35 0.5])
plot(in,out); grid on;
title(‘out(in)’);
xlabel(‘Вход, В’)
ylabel(‘Выход, В’)
% Гистограмма площадей
subplot(2,2,4,’OuterPosition’,[0.65 0 0.35 0.5])
histogram(space);grid on;
title(‘Распределение площадей’);
xlabel(‘Площадь, В^2’)
% Кривые двух методов
subplot(2,2,2,’OuterPosition’,[0.35 0.5 0.68 0.5])
plot(space.out,’b-‘);grid on;hold on;
plot(space.triangle,’r—‘);legend trapz треуг;
hold off;
title(‘Разброс площадей’);
xlabel(‘Индексы’)
ylabel(‘Время, с’)
% Кривая с ошибкой
subplot(2,2,3,’OuterPosition’,[-0.044 0 0.7 0.5])
errorbar(space.triangle,err2);grid on;
title(‘Ошибка trapz относительно треуг.’);
xlabel(‘Индексы’)
ylabel(‘Ошибка’)
Заключительный пример. Вроде все красиво, но снова эти «уши»! Исправляем.
| Было | Стало |
|---|---|
|
|
figure
subplot(2,1,1,’OuterPosition’,[-0.117 0.5 1.2 0.5])
plot(max.lag,’r-o’);hold on;
plot(lag.laga,’m-‘);
plot(lag.lagb,’b-.’);
hold off; legend Max MAa MAb;
grid on;
xlabel(‘Индексы’);ylabel(‘Запаздывание, с’);
title([num2str(l),’. ‘,data(l,1).text.name]);
subplot(2,3,4,’OuterPosition’,[0 0 0.3 0.5])
histogram(max.lag);title(‘Метод максимумов’);grid on;
subplot(2,3,5,’OuterPosition’,[0.35 0 0.3 0.5])
histogram(lag.laga);title();grid on;
subplot(2,3,6,’OuterPosition’,[0.7 0 0.3 0.5])
histogram(lag.lagb);title([‘Мат. точность.’; ‘Середина цикла’]);grid on;
На этом пока все. Если остались вопросы или Вам есть что добавить, буду рад прочитать это в комментариях.
P.S. Знаете, как сделать лучше? Сделайте и добавьте на сайт! Я проверю и опубликую.
subplot
tiledlayout is recommended over subplot because it enables you to create layouts with adjustable tile spacing, tiles that reflow according to the size of the figure, and better placed colorbars and legends. (since R2019b)
subplot( m , n , p ) divides the current figure into an m -by- n grid and creates axes in the position specified by p . MATLAB ® numbers subplot positions by row. The first subplot is the first column of the first row, the second subplot is the second column of the first row, and so on. If axes exist in the specified position, then this command makes the axes the current axes.
subplot( m , n , p , ‘replace’ ) deletes existing axes in position p and creates new axes.
subplot( m , n , p , ‘align’ ) creates new axes so that the plot boxes are aligned. This option is the default behavior.
subplot( m , n , p , ax ) converts the existing axes, ax , into a subplot in the same figure.
subplot( ‘Position’ , pos ) creates axes in the custom position specified by pos . Use this option to position a subplot that does not align with grid positions. Specify pos as a four-element vector of the form [left bottom width height] . If the new axes overlap existing axes, then the new axes replace the existing axes.
subplot( ___ , Name,Value ) modifies axes properties using one or more name-value pair arguments. Set axes properties after all other input arguments.
ax = subplot( ___ ) creates an Axes object, PolarAxes object, or GeographicAxes object. Use ax to make future modifications to the axes.
subplot( ax ) makes the axes specified by ax the current axes for the parent figure. This option does not make the parent figure the current figure if it is not already the current figure.
subplot
subplot( m , n , p ) делит текущую фигуру на m — n сетка и создает оси в положении, заданном p MATLAB ® положения подграфика чисел строкой. Первый подграфик является первым столбцом первой строки, второй подграфик является вторым столбцом первой строки и так далее. Если оси существуют в заданном положении, то эта команда делает оси текущими осями.
subplot( m , n , p , ‘replace’ ) удаляет существующие оси в положении p и создает новые оси.
subplot( m , n , p , ‘align’ ) создает новые оси так, чтобы поля графика были выровнены. Эта опция является поведением по умолчанию.
subplot( m , n , p , ax ) преобразует существующие оси, ax , в подграфик на том же рисунке.
subplot( ‘Position’ , pos ) создает оси в пользовательском положении, заданном pos . Используйте эту опцию, чтобы расположить подграфик, который не выравнивается с положениями сетки. Задайте pos как четырехэлементный вектор из формы [left bottom width height] . Если новые оси перекрывают существующие оси, то новые оси заменяют существующие оси.
subplot( ___ , Name,Value ) изменяет свойства осей с помощью одного или нескольких аргументов пары «имя-значение». Установите свойства осей после всех других входных параметров.
ax = subplot( ___ ) создает Axes объект, PolarAxes объект или GeographicAxes объект. Используйте ax сделать будущие модификации к осям.
subplot( ax ) делает оси заданными ax текущая система координат для родительской фигуры. Эта опция не заставляет родительский элемент изобразить текущую фигуру, если это уже не текущая фигура.
Примеры
Верхние и более низкие подграфики
Создайте фигуру с двумя сложенными подграфиками. Постройте синусоиду в каждом.
subplot(2,1,1); x = linspace(0,10); y1 = sin(x); plot(x,y1) subplot(2,1,2); y2 = sin(5*x); plot(x,y2)

Квадрант подграфиков
Создайте фигуру, разделенную на четыре подграфика. Постройте синусоиду в каждом и заголовке каждый подграфик.
subplot(2,2,1) x = linspace(0,10); y1 = sin(x); plot(x,y1) title('Subplot 1: sin(x)') subplot(2,2,2) y2 = sin(2*x); plot(x,y2) title('Subplot 2: sin(2x)') subplot(2,2,3) y3 = sin(4*x); plot(x,y3) title('Subplot 3: sin(4x)') subplot(2,2,4) y4 = sin(8*x); plot(x,y4) title('Subplot 4: sin(8x)')

Подграфики с различными размерами
Создайте фигуру, содержащую с тремя подграфиками. Создайте два подграфика через верхнюю половину фигуры и третий подграфик, который охватывает более низкую половину фигуры. Добавьте заголовки на каждый подграфик.
subplot(2,2,1); x = linspace(-3.8,3.8); y_cos = cos(x); plot(x,y_cos); title('Subplot 1: Cosine') subplot(2,2,2); y_poly = 1 - x.^2./2 + x.^4./24; plot(x,y_poly,'g'); title('Subplot 2: Polynomial') subplot(2,2,[3,4]); plot(x,y_cos,'b',x,y_poly,'g'); title('Subplot 3 and 4: Both')

Замена подграфика на пустые оси
Создайте фигуру с четырьмя диаграммами стебель-листья случайных данных. Затем замените второй подграфик на пустые оси.
for k = 1:4 data = rand(1,10); subplot(2,2,k) stem(data) end

subplot(2,2,2,'replace')

Подграфики в пользовательских положениях
Создайте фигуру с двумя подграфиками, которые не выравниваются с положениями сетки. Задайте пользовательское положение для каждого подграфика.
pos1 = [0.1 0.3 0.3 0.3]; subplot('Position',pos1) y = magic(4); plot(y) title('First Subplot') pos2 = [0.5 0.15 0.4 0.7]; subplot('Position',pos2) bar(y) title('Second Subplot')

Создание подграфиков с полярными осями
Создайте фигуру с двумя полярными осями. Создайте полярную линейную диаграмму в верхнем подграфике и полярной диаграмме поля точек в более низком подграфике.
figure ax1 = subplot(2,1,1,polaraxes); theta = linspace(0,2*pi,50); rho = sin(theta).*cos(theta); polarplot(ax1,theta,rho) ax2 = subplot(2,1,2,polaraxes); polarscatter(ax2,theta,rho)

Изменение Свойств осей графика после создания
Создайте фигуру с двумя подграфиками. Присвойте Axes объекты к переменным ax1 и ax2 . Задайте Axes объекты как входные параметры к функциям построения графика, чтобы гарантировать, что функции строят в определенный подграфик.
ax1 = subplot(2,1,1); Z = peaks; plot(ax1,Z(1:20,:)) ax2 = subplot(2,1,2); plot(ax2,Z)

Измените оси путем установки свойств Axes объекты. Измените размер шрифта для верхнего подграфика и ширину линии для более низкого подграфика. Некоторые функции построения графика устанавливают свойства осей. Выполните функции построения графика прежде, чем задать свойства осей постараться не заменять существующие настройки свойства осей. Используйте запись через точку, чтобы установить свойства.
ax1.FontSize = 15; ax2.LineWidth = 2;

Создание подграфика текущей системой координат
Создайте фигуру с несколькими подграфиками. Сохраните Axes объекты в векторном ax . Затем делайте второй подграфик текущими осями. Создайте линейную диаграмму и измените пределы по осям для второго подграфика. По умолчанию графические функции предназначаются для текущей системы координат.
for k = 1:4 ax(k) = subplot(2,2,k); end subplot(ax(2)) x = linspace(1,50); y = sin(x); plot(x,y,'Color',[0.1, 0.5, 0.1]) title('Second Subplot') axis([0 50 -1 1])

Преобразование существующих осей в подграфик
Создайте линейную диаграмму. Затем преобразуйте оси так, чтобы это был более низкий подграфик фигуры. Функция подграфика использует фигуру, на которой существовали исходные оси.
x = linspace(1,10); y = sin(x); plot(x,y) title('Sine Plot')

ax = gca; subplot(2,1,2,ax)

Преобразование осей в отдельных фигурах к подграфикам
Объедините оси, которые существуют на отдельных рисунках на одной фигуре с подграфиками.
Создайте два графика в двух различных фигурах. Присвойте Axes объекты к переменным ax1 и ax2 . Присвойте Legend возразите против переменной lgd .
figure x = linspace(0,10); y1 = sin(x); plot(x,y1) title('Line Plot 1')

ax1 = gca; figure y2 = 2*sin(x); plot(x,y2) title('Line Plot 2') lgd = legend('2*Sin(x)');

ax2 = gca;
Создайте копии двух Axes объекты с помощью copyobj . Задайте родительские элементы скопированных осей как новая фигура. Поскольку легенды и шкалы палитры не становятся скопированными со связанными осями, копируют легенду с осями.
fnew = figure; ax1_copy = copyobj(ax1,fnew); subplot(2,1,1,ax1_copy) copies = copyobj([ax2,lgd],fnew); ax2_copy = copies(1); subplot(2,1,2,ax2_copy)

Входные параметры
m — Количество строк сетки
1 (значение по умолчанию) | положительное целое число
Количество строк сетки в виде положительного целого числа.
Типы данных: single | double
n — Количество столбцов сетки
1 (значение по умолчанию) | положительное целое число
Количество столбцов сетки в виде положительного целого числа.
Типы данных: single | double
p — Положение сетки для новых осей
скаляр | вектор
Положение сетки для новых осей в виде скаляра или вектора из положительных целых чисел.
- Если p скалярное положительное целое число, затем subplot создает подграфик в положении сетки p .
- Если p вектор из положительных целых чисел, затем subplot создает подграфик, который охватывает положения сетки, перечисленные в p .
Пример: subplot(2,3,1) создает подграфик в положении 1.
Пример: subplot(2,3,[2,5]) создает подграфик, охватывающий положения 2 и 5.
Пример: subplot(2,3,[2,6]) создает подграфик, охватывающий положения 2, 3, 5, и 6.
Типы данных: single | double
pos — Пользовательское положение для новых осей
четырехэлементный вектор
Пользовательское положение для новых осей в виде четырехэлементного вектора из формы [left bottom width height] .
- left и bottom элементы задают положение нижнего левого угла подграфика относительно нижнего левого угла фигуры.
- width и height элементы задают размерности подграфика.
Задайте значения между 0 и 1 это нормировано относительно внутренней части фигуры.
Примечание
При использовании скрипта, чтобы создать подграфики, MATLAB не завершает Position значение свойства до любого drawnow команда дается, или MATLAB возвращается, чтобы ждать пользовательской команды. Position значение свойства для подграфика подвержено изменениям до скрипта или обновляет график или выходы.
Пример: subplot(‘Position’,[0.1 0.1 0.45 0.45])
Типы данных: single | double
ax — Существующие оси, чтобы сделать текущим или преобразовать в подграфик
Axes возразите | PolarAxes возразите | GeographicAxes возразите | графический объект
Существующие оси, чтобы сделать текущим или преобразовать в подграфик в виде Axes объект, PolarAxes объект, GeographicAxes объект или графический объект с PositionConstraint свойство, такое как HeatmapChart объект.
Чтобы создать пустые полярные или географические оси в положении подграфика, задайте ax как polaraxes или geoaxes функция. Например, subplot(2,1,2,polaraxes) .
Аргументы name-value
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, . NameN, ValueN .
Пример: subplot(m,n,p,’XGrid’,’on’)
Некоторые функции построения графика заменяют настройки свойства. Рассмотрите свойства осей установки после графического вывода. Свойства, которые можно установить, зависят от типа осей:
- Для Осей декартовой системы координат смотрите Свойства осей графика .
- Для полярных осей смотрите PolarAxes Properties .
- Для географических осей смотрите GeographicAxes Properties .
Советы
- Чтобы очистить содержимое фигуры, используйте clf . Например, вы можете очистить существующее размещение подграфика от фигуры прежде, чем создать новое размещение подграфика.
- Чтобы наложить оси, используйте axes команда вместо этого. subplot функция удаляет существующие оси, которые перекрывают новые оси. Например, subplot(‘Position’,[.35 .35 .3 .3]) удаляет любые базовые оси, но axes(‘Position’,[.35 .35 .3 .3]) положения новые оси посреди фигуры, не удаляя базовые оси.
- subplot(111) исключение и не идентичный в поведении к subplot(1,1,1) . Для назад совместимости, subplot(111) особый случай подграфика, который сразу не создает оси, но настраивает фигуру так, чтобы следующая графическая команда выполнила clf reset . Следующая графическая команда удаляет все дочерние элементы фигуры и создает новые оси в положении по умолчанию. subplot(111) не возвращает Axes возразите и ошибка происходит, если код задает возвращаемый аргумент.
Альтернативная функциональность
Используйте tiledlayout и nexttile функции, чтобы создать конфигурируемое плиточное размещение графиков. Параметры конфигурации включают:
- Управление интервалом между графиками и вокруг ребер размещения
- Опция для разделяемого заголовка наверху размещения
- Опции для разделяемого x — и y — подписи по осям
- Опция, чтобы управлять, имеет ли плиточное размещение фиксированный размер или переменный размер, который может обратное течение
Для получения дополнительной информации смотрите Построение нескольких графиков.
Смотрите также
Функции
Свойства
- Свойства осей графика | PolarAxes Properties | Свойства GeographicAxes
Темы
Представлено до R2006a
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
