2.6. Отображение нескольких графиков в одном окне
Ранее, при рассмотрении функции plot для рисования кривых на плоскости, уже описывался способ для рисования нескольких кривых в одних осях с использованием команд hold on / hold off. Этот же прием можно использовать и в том случае, если в одних осях нужно отобразить несколько графиков разного вида. В следующем примере в одних осях строятся линии уровня и картина векторного поля (результат показан на рисунке 2.31).
>> [x, y] = meshgrid (-2 : 0.5 : 2, -2 : 0.5 : 2);
>> r2 = x .^ 2 + y .^ 2;
>> alpha=3;
>> Ax = exp (-r2 / alpha .^ 2) .* x;
>> Ay = exp (-r2 / alpha .^ 2) .* y;
>> quiver(x, y, Ax, Ay)
>> hold on
>> contour (x, y, r2)
>> hold off
Рис. 2.31.
Таким же образом можно совмещать и трехмерные графики. Например, на рисунке 2.32 показаны две трехмерные поверхности, полученные с помощью следующих команд:
>> [x, y] = meshgrid (-2 : 0.1 : 2, -2 : 0.1 : 2);
>> r2 = x .^ 2 + y .^ 2;
>> surf (x, y, r2)
>> hold on
>> surf (x, y, r2 + 5)
>> hold off
Рис. 2.32.
Можно совмещать даже двумерные и трехмерные графики. Следующий пример отображает одновременно трехмерную поверхность и линии уровня (результат показан на рисунке 2.33).
>> [x, y] = meshgrid (-2 : 0.1 : 2, -2 : 0.1 : 2);
>> r2 = x .^ 2 + y .^ 2;
>> surf (x, y, r2)
>> hold on
>> contour (x, y, r2)
>> hold off
Рис. 2.33.
Предыдущий пример можно упростить. Дело в том, что для одновременного рисования трехмерной поверхности и линий уровня есть функция surfc, поэтому предыдущий пример можно изменить на следующий, результат при этом будет совпадать с тем, что показано на рисунке 2.33.
>> [x, y] = meshgrid (-2 : 0.1 : 2, -2 : 0.1 : 2);
>> r2 = x .^ 2 + y .^ 2;
>> surfc (x, y, r2)
Несколько графиков можно рисовать не только в одних осях, можно окно фигуры разбить на несколько областей, и в каждой области рисовать свой график. Например, можно сделать, чтобы окно фигуры выглядело так, как показано на рисунке 2.34.
Рис. 2.34.
Для расположения нескольких графиков в одном окне предназначена функция subplot. Эта функция имеет несколько различных синтаксисов для ее использования, один из которых выглядит следующим образом:
subplot(m, n, p)
Здесь m и n определяют виртуальную таблицу, в ячейках которой будут отображаться графики. Эти переменные задают соответственно количество строк и столбцов такой таблицы. То есть окно фигуры будет условно поделено на m частей по вертикали и n частей по горизонтали. Параметр p задает номер ячейки, которая станет активной, и куда затем будут выводиться графики с помощью уже рассмотренных функций. Номер активной ячейки отсчитывается построчно, начиная с верхней левой ячейки, которая имеет номер 1. Рисунок 38 показывает нумерацию ячеек для случая трех строк и пяти столбцов.
Рис. 2.35.
При использовании функции subplot не обязательно заполнять все ячейки виртуальной таблицы, более того, для каждого графика можно задавать разное количество строк и столбцов виртуальной таблицы. Например, чтобы получить рисунок 2.34, использовалось три вызова subplot со следующими параметрами:
Верхний левый график: subplot (2, 2, 1);
Верхний правый график: subplot (2, 2, 2);
Нижний график: subplot (2, 1, 2).
Как видно, для построения рисунка 2.34 использовались разные виртуальные таблицы. В принципе, можно задавать такое разбиение, когда графики будут пересекаться, правда, практического смысла в этом обычно нет. Следующий пример показывает последовательность действий, приводящую к построению фигуры, показанной на рисунке 2.34:
>> clear
>>
>> % Верхний левый график
>> [x1, y1] = meshgrid (-2: 0.1: 2, -2: 0.1: 2);
>> f1 = x1 .^ 2 + y1 .^ 2;
>> subplot (2, 2, 1)
>> surf (x1, y1, f1)
>>
>> % Верхний правый график
>> x2 = -10: 0.05: 10;
>> f2 = sinc (x2 / pi);
>> subplot (2, 2, 2)
>> plot (x2, f2)
>> grid on
>>
>> % Нижний график
>> x3 = -10: 0.01: 10;
>> f3 = exp (-(x3 .* x3));
>> subplot (2, 1, 2)
>> plot (x3, f3)
Функция subplot имеет и другие синтаксисы вызова, в данном пособии они не рассматриваются, но подробно описаны в документации.
Если нужно отобразить несколько графиков в разных окнах, то для создания нового окна используется функция figure, которая в простейшем случае не принимает никакие параметры. После вызова функции figure откроется новое окно, которое станет текущем при рисовании, и последующие вызовы функции рисования будут отображать графики именно в этом окне. Команда clf очищает текущее окно фигуры и создает новую фигуру, если ни одной фигуры еще не создано.
Например, следующие команды рисуют три графика в трех разных окнах:
>> % Удалим все переменные
>> clear
>>
>> % Очистим фигуру, если она уже есть, или создадим новую
>> clf
>>
>> % Первый график
>> [x1, y1] = meshgrid (-2: 0.1: 2, -2: 0.1: 2);
>> f1 = x1 .^ 2 + y1 .^ 2;
>> surf (x1, y1, f1)
>>
>> % Второй график
>> figure
>> x2 = -10: 0.05: 10;
>> f2 = sinc (x2 / pi);
>> plot (x2, f2)
>> grid on
>>
>> % Третий график
>> figure
>> x3 = -10: 0.01: 10;
>> f3 = exp (-(x3 .* x3));
>> plot (x3, f3)
Yandex.RTB R-A-252273-3
- Оглавление
- Предисловие
- Раздел 1. Основные сведения о среде программирования «matlab»
- Глава 1. Вычисления в командном режиме
- 1.1. Простейшие математические операции в matlab
- 1.2. Переменные
- 1.3. Создание матриц
- 1.4. Доступ к элементам матриц
- 1.5. Операции с матрицами
- 1.6. Ввод, вывод и работа со строками
- Глава 2. Построение графиков в matlab
- 2.1. Построение графика в виде двумерной линии
- 2.2. Оформление графиков
- 2.3. Построение трехмерных графиков
- 2.4. Построение линий уровня
- 2.5. Построение векторного поля
- 2.6. Отображение нескольких графиков в одном окне
- Глава 3. Скрипты в matlab и управляющие конструкции
- 3.1. Создание и выполнение скриптов в matlab
- 3.2. Оператор for
- 3.3. Логические операции
- 3.4. Оператор if / elseif / else
- 3.5. Оператор while
- 3.6. Операторы break / continue
- 3.7. Оператор switch
- 3.8. Создание функций
- Раздел 2. Краткие теоретические сведения и задания Тема 1. Векторный анализ
- 1.1. Элементы векторного анализа
- Задания
- Тема 2. Уравнения Максвелла (произвольная и гармоническая временная зависимость, статические, стационарные и квазистационарные поля)
- 2.1. Система уравнений электродинамики – уравнения Максвелла
- 2.2. Граничные условия. Принцип эквивалентности
- Задания
- Тема 3. Плоские волны
- 3.1. Явление дисперсии и групповая скорость
- Задания
- Тема 4. Граничные задачи, уравнения и методы
- 4.1. К классификации электромагнитных явлений
- Задания
- 4.2. Метод конечных разностей
- 4.2.1. Конечно-разностная аппроксимация
- 4.2.2. Конечно-разностная аппроксимация уравнений Лапласа и Пуассона
- 4.2.3. Конечно-разностная аппроксимация для граничных узлов
- Задания
- Литература