Сделай Сам Свою Работу на 5

Отображение нескольких графиков в одном окне

Ранее, при рассмотрении функции 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- 2019 stydopedia.ru Все материалы защищены законодательством РФ.