|
Отображение нескольких графиков в одном окне
Ранее, при рассмотрении функции 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 со следующими параметрами:
1. Верхний левый график: subplot (2, 2, 1);
2. Верхний правый график: subplot (2, 2, 2);
3. Нижний график: 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)
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|