Progress-servis55.ru

Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Matlab два графика в одном окне

Matlab два графика в одном окне

1. Построение двумерных графиков функций

В результате вычислений в системе MATLAB обычно получается большой массив данных, который трудно анализировать без наглядной визуализации. Поэтому система визуализации, встроенная в MATLAB, придаёт этому пакету особую практическую ценность.

Графические возможности системы MATLAB являются мощными и разнообразными. В первую очередь целесообразно изучить наиболее простые в использовании возможности. Их часто называют высокоуровневой графикой. Это название отражает тот приятный факт, что пользователю нет никакой необходимости вникать во все тонкие и глубоко спрятанные детали работы с графикой.

Например, нет ничего проще, чем построить график функции одной вещественной переменной. Следующие команды

x = 0 : 0.01 : 2;

y = sin( x );

вычисляют массив y значений функции sin для заданного набора аргументов.

После этого одной единственной командой

plot( x , y )

удаётся построить вполне качественно выглядящий график функции:

MATLAB показывает графические объекты в специальных графических окнах, имеющих в заголовке слово Figure (изображение, внешний вид, фигура).

При построении графиков функций сразу проявляется тот факт, что очень большую часть работы MATLAB берёт на себя. Мы в командной строке ввели лишь одну команду, а система сама создала графическое окно, построила оси координат, вычислила диапазоны изменения переменных x и y; проставила на осях метки и соответствующие им числовые значения, провела через опорные точки график функции некоторым, выбранным по умолчанию, цветом; в заголовке графического окна надписала номер графика в текущем сеансе работы.

Если мы, не убирая с экрана дисплея первое графическое окно, вводим и исполняем ещё один набор команд

x = 0 : 0.01 : 2;

z = cos( x );

plot( x , z )

то получаем новый график функции в том же самом графическом окне (при этом старые оси координат и график в нём пропадают — этого можно также добиться командой clf, а командой cla удаляют только график с приведением осей координат к их стандартным диапазонам от 0 до 1):

Если нужно второй график провести «поверх первого графика», то перед исполнением второй графической команды plot, нужно выполнить команду

hold on

которая предназначена для удержания текущего графического окна. В результате будет получено следующее изображение:

Того же самого можно добиться, потребовав от функции plot построить сразу несколько графиков в рамках одних и тех же осей координат:

x = 0 : 0.01 : 2;

y = sin( x ); z = cos( x );

plot( x , y , x , z )

У такого способа есть ещё одно (кроме экономии на команде hold on) преимущество, так как разные графики автоматически строятся разным цветом.

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

Если всё же нужно одновременно визуализировать несколько графиков так, чтобы они не мешали друг другу, то это можно сделать двумя способами. Во-первых, можно построить их в разных графических окнах. Например, построив графики функций sin и cos в пределах одного графического окна (показано выше), вычисляем значения для функции exp:

w = exp( x );

После этого выполняем команды

figure; plot( x , w )

которые построят график функции exp в новом графическом окне, так как команда figure создаёт новое (добавочное) графическое окно, и все последующие за ней команды построения графиков выводят их в новое окно:

В результате в первом графическом окне (Figure No. 1) по вертикальной оси переменные изменяются в диапазоне от -0.5 до 1, а во втором графическом окне (Figure No. 2) — от 1 до 8.

Вторым решением рассматриваемой задачи показа сразу нескольких графиков без конфликта диапазонов осей координат является использование функции subplot. Эта функция позволяет разбить область вывода графической информации на несколько подобластей, в каждую из которых можно вывести графики различных функций.

Например, для ранее выполненных вычислений с функциями sin, cos и exp, строим графики первых двух функций в первой подобласти, а график третьей функции — во второй подобласти одного и того же графического окна:

subplot(1,2,1); plot(x,y,x,z)

subplot(1,2,2); plot(x,w)

в результате чего получаем графическое окно следующего вида:

Диапазоны изменения переменных на осях координат этих подобластей независимы друг от друга.

Функция subplot принимает три числовых аргумента, первый из которых равен числу рядов подобластей, второе число равно числу колонок подобластей, а третье число — номеру подобласти (номер отсчитывается вдоль рядов с переходом на новый ряд по исчерпанию).

Если для одиночного графика диапазоны изменения переменных вдоль одной или обоих осей координат слишком велики, то можно воспользоваться функциями построения графиков в логарифмических масштабах. Для этого предназначены функции semilogx, semilogy и loglog. Подробную информацию по использованию этих функций всегда можно получитьпри помощи команды

Читать еще:  Matlab добавить элемент в массив

help имя_функции

набираемой с клавиатуры и выполняемой в командном окне системы MATLAB.

Итак, уже рассмотренные примеры показывают, как подсистема высокоуровневой графики MATLABа легко справляется с различными случаями построения графиков, не требуя слишком большой работы от пользователя. Ещё одним таким примером является построение графиков в полярных координатах. Например, если нужно построить график функции r = sin( 3 f ) в полярных координатах, то следующие несколько команд

phi = 0 : 0.01 : 2*pi; r = sin( 3* phi );

Построение графиков с двумя независимыми осями в Matlab

Статья будет полезна тем, кто оформляет графики в среде Matlab.

При подготовке графиков для публикации статей в научных журналах и различного рода отчетов, я довольно часто сталкивался с необходимостью построения нескольких кривых, относящихся каждая к своей оси — чтобы не перегружать статью графиками и не выходить за их лимит. Но для этого в Matlab до версии R2014a была лишь команда plotyy(X1,Y1,X2,Y2), которая имеет ряд неприятных особенностей, из-за которых приходилось пользоваться другими программами и делать все вручную, что во-первых, усложняет этот процесс с точки зрения единой стилистики, во-вторых требует большого количества времени, а в-третьих не позволяет оперативно вносить изменения.

К таким неприятным особенностям я бы отнес:

1. Отсутствие аналога hold on («родной» hold on работает не совсем корректно с plotyy). Для того, чтобы добавить более, чем 2 кривые необходимо использовать вот такую конструкцию:

Из этой конструкции вытекает неприятная особенность №2:

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

3. Оформление серьезно страдает оттого, что нельзя программными методами изменить цвета и типы всех линий подряд, можно форматировать только набор линий, относящихся к конкретной оси (hLine1 и hLine2) — во всяком случае, я не смог. При этом, я не говорю сейчас об изменении параметров руками, т.е. редактированием в окне «figure» — только непосредственно кодом в .m-файле.

Резюмируя вышесказанное: plotyy() не очень хорошо подходит для отображения нескольких наборов графиков для разных осей. Разве что для простеньких зависимостей типа этих:

То ли дело команда yyaxes, появившаяся в версии Matlab R2014a. Вот тут уж нам стало где развернуться.

Рассказать о прелестях данной команды я бы хотел на своем примере. Задача состоит в том, что мне необходимо построить на одном графике 3 профиля температур (решения, полученные прямым численным методом, моментным методом и экспериментальные значения), относящихся к правой оси, и 3 профиля давлений, относящихся к левой оси. А также добавить стрелки и подписи.

Команды yyaxis left и yyaxis right позволяют справиться с этой задачей на раз. В чем, собственно, суть. В рамках одной figure мы можем построить любое количество графиков, привязав их к одной из осей. В рамках каждой из команд прекрасно работает все то же самое, что и для обычных графиков.

Структура рисунка в таком случае будет выглядеть так:

Наполнив эту структуру необходимым, получаем в результате:

Еще одна дополнительная фишка в подготовке графиков к печати — это их простое и удобное сохранение в любом, поддерживаемом Matlab-ом, формате. Для этого необходимо лишь добавить следующие строки:

Начиная с версии R2014a Matlab стал подходящей программой для подготовки графиков к публикации статей в различных научных журналах. Важным плюсом является очень хорошая гибкость этого инструмента, позволяющая обрабатывать результаты и представлять их в удобоваримом и красивом виде, в том числе и для т.н. «пакетной» обработки.

Matlab два графика в одном окне

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

3.1. Функция plot

Рассмотрение возможностей MatLab по визуализации данных начнем с двумерных графиков, которые обычно строятся с помощью функции plot(). Множество вариантов работы данной функции лучше всего рассмотреть на конкретных примерах.

Предположим, что требуется вывести график функции синуса в диапазоне от 0 до . Для этого зададим вектор (множество) точек по оси Ox, в которых будут отображаться значения функции синуса:

В результате получится вектор столбец со множеством значений от 0 до и с шагом 0,01. Затем, вычислим множество значений функции синуса в этих точках:

и выведем результат на экран

В результате получим график, представленный на рис. 3.1.

Представленная запись функции plot() показывает, что сначала записывается аргумент со множеством точек оси Ох, а затем, аргумент со множеством точек оси Oy. Зная эти значения, функция plot() имеет возможность построить точки на плоскости и линейно их интерполировать для придания непрерывного вида графика.

Читать еще:  Matlab help на русском

Рис. 3.1. Отображение функции синуса с помощью функции plot().

Функцию plot() можно записать и с одним аргументом x или y:

в результате получим два разных графика, представленные на рис. 3.2.

Анализ рис. 3.2 показывает, что в случае одного аргумента функция plot() отображает множество точек по оси Oy, а по оси Оx происходит автоматическая генерация множества точек с единичным шагом. Следовательно, для простой визуализации вектора в виде двумерного графика достаточно воспользоваться функцией plot() с одним аргументом.

Для построения нескольких графиков в одних и тех же координатных осях, функция plot() записывается следующим образом:

x = 0:0.01:pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,x,y2);

Результат работы данного фрагмента программы представлен на рис. 3.3.

Рис. 3.2. Результаты работы функции plot() с одним аргументом:

а – plot(x); б – plot(y).

Рис. 3.3. Отображение двух графиков в одних координатных осях.

Аналогичным образом можно построить два графика, используя один аргумент функции plot(). Предположим, что есть два вектора значений

y1 = sin(x);
y2 = cos(x);

которые требуется отобразить на экране. Для этого объединим их в двумерную матрицу

в которой столбцы составлены из векторов y1 и y2 соответственно. Такая матрица будет отображена функцией

plot([y1’ y2’]); % апострофы переводят вектор-строку
% в вектор-столбец

в виде двух графиков (рис. 3.4).

Рис. 3.4. Отображение двумерной матрицы в виде двух графиков.

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

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0:0.01:pi;
y2 = cos(x2);

plot(x1, y1); % рисование первого графика
figure; % создание 2-го графического окна
plot(x2, y2); % рисование 2-го графика во 2-м окне

Функция figure, используемая в данной программе, создает новое графическое окно и делает его активным. Функция plot(), вызываемая сразу после функции figure, отобразит график в текущем активном графическом окне. В результате на экране будут показаны два окна с двумя графиками.

Неудобство работы приведенного фрагмента программы заключается в том, что повторный вызов функции figure отобразит на экране еще одно новое окно и если программа будет выполнена дважды, то на экране окажется три графических окна, но только в двух из них будут актуальные данные. В этом случае было бы лучше построить программу так, чтобы на экране всегда отображалось два окна с нужными графиками. Этого можно достичь, если при вызове функции figure в качестве аргумента указывать номер графического окна, которое необходимо создать или сделать активным, если оно уже создано. Таким образом, вышеприведенную программу можно записать так.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0:0.01:pi;
y2 = cos(x2);

figure(1); %создание окна с номером 1
plot(x1, y1); % рисование первого графика
figure(2); % создание графического окна с номером 2
plot(x2, y2); % рисование 2-го графика во 2-м окне

При выполнении данной программы на экране всегда будут отображены только два графических окна с номерами 1 и 2, и в них показаны графики функций синуса и косинуса соответственно.

В некоторых случаях большего удобства представления информации можно достичь, отображая два графика в одном графическом окне. Это достигается путем использования функции subplot(), имеющая следующий синтаксис:

Рассмотрим пример отображения двух графиков друг под другом вышеприведенных функций синуса и косинуса.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

x2 = 0:0.01:pi;
y2 = cos(x2);

figure(1);
subplot(2,1,1); % делим окно на 2 строки и один столбец
plot(x1,y1); % отображение первого графика
subplot(2,1,2); % строим 2-ю координатную ось
plot(x2,y2); % отображаем 2-й график в новых осях

Результат работы программы показан на рис. 3.5.

Аналогичным образом можно выводить два и более графиков в столбец, в виде таблицы и т.п. Кроме того, можно указывать точные координаты расположения графика в графическом окне. Для этого используется параметр position в функции subplot():

subplot(‘position’, [left bottom width height]);

где left – смещение от левой стороны окна; bottom – смещение от нижней стороны окна; w >

Рис. 3.5. Пример работы функции subplot.

Ниже представлен фрагмент программы отображения графика функции синуса в центре графического окна. Результат работы показан на рис. 3.6.

x1 = 0:0.01:2*pi;
y1 = sin(x1);

subplot(‘position’, [0.33 0.33 0.33 0.33]);
plot(x1,y1);

Читать еще:  Matlab русский язык

В данном примере функция subplot() смещает график на треть от левой и нижней границ окна и рисует график с шириной и высотой в треть графического окна. В результате, получается эффект рисования функции синуса по центру основного окна.

Таким образом, используя параметр position можно произвольно размещать графические элементы в плоскости окна.

Рис. 3.6. Пример работы функции subplot с параметром position.

© 2020 Научная библиотека

Копирование информации со страницы разрешается только с указанием ссылки на данный сайт

Построение двумерных графиков функций в среде MATLAB

Основной функцией, обеспечивающей построение графиков функций одной переменной в линейном масштабе в декартовой системе координат, является функцияplot, общаяформа синтаксиса которой имеет вид:

Plot (x, у)

Plot (x, у, s)

Plot (x1, y1, s1, x2, y2, s2, . ,xn, yn, sn),

где: х – аргумент функции, задаваемой в виде вектора;у – функция, представленная в аналитическом виде или в виде вектора или матрицы;s– вектор стилей графика; константа, определяющая цветлиний графика, тип точек и тип линии;x1, х2. хn– аргументы функций, изображаемых на одномграфике;y1, у2, . уn– функции, изображаемые на одном графике.

Другим способом построения нескольких графиков в одной системе координат и в одном графическом окне является использование команды holdon, блокирующей создание нового графического окна после использования функции plot. Например, следующая последовательность команд обеспечивает построение двух графиков функций f(x)и y(x)в одной системе координат и в одном графическом окне:

Plot(x, y)

Hold on

Plot(x, f)

Данная последовательность команд аналогична одной команде следующего вида:

Plot(x, y, x, f)

Для создания нового графического окна в среде MATLAB используется команда figure, после применения которой, все последующие графические операции будут осуществлять построение графиков в данном окне. Например, следующая последовательность команд обеспечивает построение двух графиков функций f(x)и y(x)в двух различных графических окнах:

Plot(x, y)

Figure

Plot(x, f)

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

Таблица 1Параметры, определяющие стиль графика

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

Например, команда следующего вида позволяет построить график красного цвета (‘R’), точки графика представлены звездочками (‘*’), линия графика, соединяющая эти точки является штрихпунктирной линией (‘-.’):

plot (x,у,[R,*,-.])

Помимо описанного выше программного способа задания стилей графика в среде MATLABсуществует возможность модификаций внешнего вида графиков, используя возможности графического окна, в котором они отображаются.

Графическое представление в виде ступенчатого графика осуществляется с помощью функции stairs, синтаксис которой аналогичен синтаксису функции plot.

Для построения двух графиков в разном масштабе в одной системе координат используется функция plotyy, которая позволяет отображать на графике 2 оси ординат. Синтаксис функции plotyy аналогичен синтаксису функции plot.

Для построения графиков в логарифмическом и полулогарифмическом масштабе используются следующие функции:

loglog – построение графика в логарифмическом масштабе;

semilogx – построение графика в полулогарифмическом масштабе по оси x;

semilogy – построение графика в полулогарифмическом масштабе по оси y.

Синтаксис функций построения графиком в логарифмическом масштабе аналогичен синтаксису функции plot.

Для оформления графиков в среде MATLABслужат следующие операторы:

title(‘inscription’)– задание титульной надписина графике (inscription– текстовая надпись, которую необходимо заключить в одинарные кавычки);

xlabel(‘inscription’) – задание надписи по оси x;

ylabel(‘inscription’)– задание надписи по оси y;

gridon– задание пунктирной масштабной сетки на графике.

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

Subplot (m, n, p)

где m – число графиков по горизонтали, n – по вертикали, p – текущая позиция графика.

Номер подграфика отсчитывается от левого верхнего угла построчно. Команда следующего вида предполагает наличие 6 подграфиков в одном графическом окне (3 по вертикали и 2 по горизонтали):

Subplot (3, 2, 4)

Данная команда делает четвертый по счету график текущим (второй справа в среднем ряду), после выполнения такой команды все графические операции будут осуществлять вывод в данный подграфик.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Увлечёшься девушкой-вырастут хвосты, займёшься учебой-вырастут рога 10348 — | 8002 — или читать все.

Ссылка на основную публикацию
Adblock
detector