Некоторые полезные средства настройки графиков (plot) в MATLAB
Недавно, в очередной раз проверяя домашние работы своих студентов, я загорелся желанием автоматизировать этот процесс. Задание состояло в составлении рабочей таблицы девиации магнитного компаса и построения кривой девиации.
Входными данными служили показания магнитного компаса (МК), синхронно наблюдаемые показания гирокомпаса (ГК), поправка ГК и значение магнитного склонения для района, в котором проходили измерения.
Все данные были занесены в таблицу и разделены из 10 столбцов с входными данными и 25 строк – значений входных данных для каждого из вариантов. Для удобства считывания данных в MATLAB они были записаны в виде текстового файла и импортировались в рабочее пространство с помощью функции importdata.
По методике расчетов необходимо было обработать данные с помощью нескольких эмпирических формул для заполнения рабочей таблицы девиации МК. Однако, основным и наиболее наглядным результатом работы является построение кривой девиации МК.
Для построения графика была выбрана функция plot, имеющая большое количество параметров настройки, которые позволяют получить результат в нужном виде. Был составлен код:
И получен следующий график:
Разберем код построчно, рассмотрим какие параметры можно указывать для настройки отображения графиков.
Здесь задаются входные данные для построения графика. Количество значений по оси абсцисс и по оси ординат должно совпадать. По эти данные являются векторами с 36 значениями.
Собственно, функция построения графика, в которую передаются данные и параметры. Помимо очевидных входных данных параметром функции является тип отображаемой линии, закодированный трехсимвольным сочетанием. В данном случае “b” – blue, цвет линии; “o” – вид маркера, которым обозначаются точки графика и “-” – тип линии, в данном случае – сплошная.
Ниже привожу список параметров для настройки отображаемой линии.
Маркер Цвет линии
c голубой
m фиолетовый
y желтый
r красный
g зеленый
b синий
w белый
k черный
Маркер Тип линии
— непрерывная
— — штриховая
: пунктирная
-. штрих-пунктирная
Маркер Тип маркера
. точка
+ знак «плюс»
* знак «звездочка»
о круг
х знак «крест»
Команда, которой включается сетка на графике.
Подписи для графика и соответствующих осей. Здесь “\circ” кодировка символа градуса.
Команда управления осями. В данном случае выставлен параметр “auto” – автоматическая расстановка осей. Здесь-то меня и не устроила работа MATLAB, т.к. автоматически оси не пристыковывались к крайним значениям графика, а «добавляли» лишнее пространство по оси “X”.

С помощью команды “help axis” я нашел еще несколько вариантов параметра для осей, в частности попробовал параметр “tight”, который должен был пристыковывать границы графика к крайним значениям кривой. Однако результат и этого параметра меня не удовлетворил т.к. результат выглядел следующим образом:

График выглядит «зажатым», к тому же «теряются» части кривой находящиеся между максимальными значениями.
Для получения наглядного результата пришлось настроить ось “X” отдельно с помощью следующих команд:
Последняя функция задает граничные значения отдельно для оси “X”, что позволило мне ограничить график максимальными значениями по данной оси.
И последняя команда:
Позволила настроить подписи и шаг для оси “X”. Функция “set” является достаточно общей, ее работа зависит от передаваемых параметров. В данном случае “gca” – означает, что параметры будут устанавливаться для сетки графика, “ XTick ” – означает, что будет управляться подпись оси “X”, а параметр “0:45:360” – задает минимальное значение, шаг и максимальное значение.
В результате получился достаточно наглядный график кривой девиации, по сравнению формы которого с формой графика полученного студентом можно было быстро оценить правильность выполнения работы. Так же, благодаря загрузке данных из файла по всем вариантам, с дальнейшим выбором последнего, изменять приходилось только номер варианта, чтобы получить результат.

Надеюсь, что эта статья будет полезной не только для начинающих MATLAB, но и для опытных пользователей.
В окончании хотел бы отметить полезность команды “help” – она не только позволяет получить необходимую информацию по функции или команде из командной строки, но и сделать это значительно быстрее, чем через поиск в справке MATLAB.
Тема 3.2.Построение графиков и визуализация результатов вычислений в MatLab.
СистемаMatLabможет создавать как плоские графики, так и трехмерные сетчатые поверхности, а также движущиеся графики, или анимацию.
В научных и технических задачах основными и наиболее часто употребительными являются графики, которые представляют собой кривые, описывающие те или иные численные данные. MatLabрасполагает набором команд высокого уровня, которые используются для построения таких кривых и управления ими. Это такие команды, как plot, title, axis, text, hist, contourи ряд других. Кроме того, строить графики, управлять ими и редактировать их можно с помощью инструментальных панелей графических окон. Можно также использовать комбинацию обоих подходов. Например, можно использовать команды для создания графиков, а затем модифицировать их.
Для того чтобы построить график функции y=f(x), достаточно тем или иным способом сформировать два вектора одинаковой размерности — вектор значений аргументов x и вектор соответствующих значений функции у, а затем выполнить команду plot. Команда plotоткрывает графическое окно и отображает в нем зависимость y(x) в линейных осях, при условии что xи yявляются векторами одинаковой длины.
Рассмотрим пример построения графика синуса на интервале от -4 до 4.
Пример 3.2-1
В результате выполнения команд открывается графическое окно (рис. 3.2-1).
В вышеописанном примере вектор x является набором равноотстоящих точек с шагом 0.01, а y— вектор со значениями функции синуса в этих точках. Для отображения графика системаMatLab открывает отдельное окно с именем Figure 1. Переход между окнами, то есть возврат в окно MatLabили переход от одного графического окна к другому графическому окну осуществляется в соответствии с правилами среды: с помощью команд основного меню; комбинации <Alt+Tab>или с помощью мыши.

Рис. 3.2-1. Графическое окно с графиком функции y=sin(x)
В вышеописанном примере вектор xявляется набором равноотстоящих точек с шагом 0.01, а y— вектор со значениями функции синуса в этих точках. Для отображения графика системаMatLab открывает отдельное окно с именем Figure 1. Переход между окнами, то есть возврат в окно MatLabили переход от одного графического окна к другому графическому окну осуществляется в соответствии с правилами среды: с помощью команд основного меню; комбинации <Alt+Tab>или с помощью мыши.
Рассмотрим еще один пример построения графика y=e − x2 на интервале [-1.5 ;1.5].
Пример 3.2-2

Рис. 3.2-2. График функции y=e − x2
Необходимо обратить внимание на то, что точка перед знаком возведения в степень (^)обязательна, поскольку мы хотим, чтобы возведение в степень выполнялось поэлементно.
В системеMatLab можно также построить кривые, заданные параметрически.
Пример 3.2—3

Рис. 3.2-3. График функции, заданный параметрически
Аргументами функции plot()могут быть различные комбинации векторов и матриц:
если y— вектор, то будет нарисована кривая yкак функция номера элемента в y;
если y— матрица, то будет сгенерирован набор кривых, каждая из которых представляет собой зависимость столбца матрицы от номера строки.
если x и y — вектора одинаковой длины и размерности (оба строки или оба столбцы), то будет нарисована кривая y от x;
если x — вектор, а y — матрица, строки или столбцы yбудут нарисованы в зависимости от x; если столбец матрицы y имеет ту же длину, что и вектор x, то будет построен набор кривых, представляющий зависимость каждого из столбцов от x; если строка матрицы y имеет ту же длину, что и вектор x, то будет построен набор кривых, представляющий зависимость каждой из строк от x; если число строк и столбцов y одинаково, то строятся столбцы от x;
если x -матрица, а y -вектор, то будет построено несколько кривых, представляющих зависимость y от строк или столбцов матрицы x по правилу, описанному в предыдущем пункте;
если x и y -матрицы одинаковой размерности, то будет построен набор кривых, представляющих столбцы y от столбцов x.
При вышеописанных способах вызова функции plot()различные кривые на одном и том же графике рисуются разным цветом. Перебор цветов выполняется автоматически, а при использовании соответствующих аргументов у команды plot()эти цвета можно выбирать.
В общем случае, число аргументов у команды plot()не ограничивается двумя, то есть plot(x1,y1,x2,y2. ), причем правила, описанные выше, относятся к каждой паре аргументов.
С помощью соответствующих команд любой график в графическом окне MatLab может быть снабжен заголовком, именами осей, и на сам график может быть помещен дополнительный текст с помощью команд вывода текста. На график можно так же поместить сетку. Аргументами всех этих команд является текстовая строка. Например, команда title(‘График наилучшего приближения’) добавит к вашему графику заголовок. Команда gtext(‘Пятно’)позволяет с помощью мыши или клавишного курсора разместить на рисунке индикаторный крест, в месте размещения которого и будет помещен текст после нажатия произвольной клавиши. При необходимости сделать подписи осей используются команды Xlabel(‘ПодписьX’), Ylabel(‘ПодписьY’).
Для изображения нескольких кривых на одном рисунке существуют два способа, которые иллюстрируются следующими примерами.
Пример 3.2-4а
Пример 3.2-4b
Эти два примера полностью эквивалентны, а результат изображен на рис. 3.2-4. Отметим, что во втором примере формируется матрица Y, содержащая значения изображаемых функций в виде столбцов.

Рис 3.2-4. Графикифункцийy1=sin(x); y2=sin(2*x);y3=sin(4*x);
Другим способом такого отображения нескольких функции на одних осях является использование команды holdon, которая замораживает текущий график, так что последующие кривые размещаются на этом же графике. При этом масштаб и разметка осей изменяются, если новая кривая не вписывается в нарисованные оси. Команда holdoffприводит к тому, что любой последующий вызов команды plotсоздает новый рисунок в этом же окне, то есть предыдущий график стирается.
При выводе графика можно сменить принятый по умолчанию тип точек, с помощью которых рисуется данный график.
Пример 3.2-5
Результат работы программы приведет к тому, что первый график будет нарисован пунктиром, второй — точками, а третий — символами + (рис. 3.2-12). В общем случае каждая линия на графике определяется триплетом x,y,s, где xи y— это вектора с координатами функции, а s– строковая переменная, образованная любыми комбинациями из каких-нибудь приведенных ниже столбцов таблицы 3.2-5.

Рис. 3.2-5. Пример графика Sin(x), Sin(2x) и Sin(3x)
. Таблица 3.2-1
По умолчанию масштаб осей выбирается автоматически, таким образом, чтобы график целиком поместился в окне, причем с разумным запасом. Кроме того, оси автоматически размечаются, и по умолчанию выбирается, декартова система координат. Причем началом координат считается точка с координатами xmin, ymin, расположенная в левом нижнем углу. Эта автоматическая установка может быть изменена с помощью команды axis. Примеры использования этой команды применительно к плоским графикам описаны в табл. 2.5-9.
При необходимости вывести в одном графическом окне несколько графиков, то есть разбить графическое окно на несколько областей — подобластей, в каждой из которых отображаются свои оси, используется команда subplot(m,n,p). Значение mуказывает, на сколько областей окно разбивается по вертикали, n– по горизонтали, а p-порядковый номер подокна при счете слева направо и сверху вниз. Команда subplotиспользуется как для создания нового подокна, так и для перехода от одного подокна к другому. После вызова этой команды plotпостроит график или графики в соответствующем подокне. Например, последовательность команд Примера 3.2-6 строит два рисунка в верхней и нижней части экрана. В верхней части строится график sin(x), а в нижней части экрана — зависимость log(abs(sin(x))). Как видно из приведенной выше последовательности команд, при x=0вычисляется log(0). При этом в командном окне появляется предупреждение, а график строится в точках −1 ≤ x ≤ 0.1и 0.1 ≤ x ≤ 1.
Таблица 3.2-2
axis([xminxmaxyminymax])
Устанавливает пределы изменения по xи yкоординатам соответственно. Если максимальный предел по любой координате установить равным Inf, то соответствующий предел будет определяться автоматически. Аналогичное справедливо для нижнего предела, если его установить равным —Inf.
Делает область вывода квадратной.
Делает единицы измерения по оси xи y одинаковыми.
Восстанавливает режим по умолчанию.
Помещает начало координат в левый верхний угол. Направление оси x— слева направо, направление оси y— сверху вниз.
Восстанавливает стандартную декартову систему координат с началом в левом нижнем углу и направлением оси yснизу вверх.
Устанавливает пределы по осям точно равными максимальным и минимальным значениям соответствующих переменных.
Делает невидимыми оси, метки осей и надписи
Включает оси и их разметку.
Пример 3.2-6
>> subplot(2, 1, 1), plot(x, y1);
>> subplot(2, 1, 2), plot(x,y2);

Рис.3.2-6. Две подобласти в одном графическом окне
Полярными координатами(ρ,θ)точки P (рис. 3.2-7) называются длина ρ радиус — вектора, проведенного из начала координат в точку P, и угол θ, образованный между осью х и этим вектором. Угол отсчитывается от положительного направления оси х к радиус-вектору против часовой стрелки.
Довольно многие математические кривые с целью устранения неоднозначности принято задавать в полярной системе координат.
Для построения графиков функций, заданных в полярной системе координат, вместо функции plotиспользуется функция polar:
Пример 3.2-7
Результат построения кардиоиды дляа=5 приведен на рис. 3.2-7.

Рис.3.2-7.График кардиоиды в полярной системе координат
Единицы измерения значений ординат и абсцисс далеко не всегда соответствуют друг другу, и для создания более обозримого графика вдоль одной или обеих координатных осей приходится выбирать логарифмический масштаб. Для построения таких графиков используются функции loglog(логарифмический масштаб по обеим осям), semilogx (логарифмический масштаб по оси x), semilogy (логарифмический масштаб по оси у).
Пример 3.2-7
Результат построения графика в логарифмическом масштабе приведен на рис.3.2-8.

Рис. 3.2-8.График с логарифмическим масштабом по оси у
Довольно интересной модификацией функции plot является функция fplot, которая строит график функции y=f(x)без предварительного вычисления векторов (x1,x2,…) и (y1,y2. ). Базовый формат вызова этой функции включает два аргумента:
fplot (@name_fun, [limits])
fplot (‘ name_fun’, [limits])
В первом случае первым аргументом является указатель на функцию с именем name_fun, во втором случае — строка с именем обрабатываемой функции. Аргумент limitsможет быть представлен либо двухкомпонентным вектором [xminхmах], либо четырехкомпонентным вектором [xminxmaxyminymax]. Укороченный вариант задает пределы изменения аргумента х, расширенный — дополнительно представляет пределы изменения функции. Например:
fplot(@sin, [0 2*pi])
fplot(‘sin’, [0 2*pi])
По сравнению с plot функция fplotберет на себя вычисление таблицы значения функции, проявляя при этом некоторый интеллект — в местах резкого изменения функции значения аргумента х выбираются с более мелким шагом. Функция fplot гарантирует, что относительное уклонение воспроизводимой функции отличается от ее идеального графика не более чем на 0,2%. Если вам нужен более точный или более грубый график, то после двух обязательных аргументов в функции fplot можно задать желаемую относительную погрешность — число, меньшее 1:
fplot(@sin, [0 2*pi], 0.05)
В этом случае гарантировано построение графика, отличающегося от идеальной кривой не более чем на 5%. По умолчанию точность равна2・10 −3 , и она определяет, на сколько точек делить интервал, чтобы погрешность от линейной интерполяции не превосходила этой заданной точности.
Еще один дополнительный параметр — целое натуральное число n требует, чтобы функция fplot использовала при построении не менее чем n+1точку. Относительная погрешность и количество точек могут задаваться в любом порядке:
fplot(@sin, [0 2*pi], 0.05, 20)
fpiot(@sin, [0 2*pi], 20, 0.05)
Наконец, как и в функции plot, среди дополнительных параметров могут находиться строки, управляющие цветом и маркировкой графика. Последовательность задания всех дополнительных параметров – произвольная. Результат выполнения следующего оператора приведен на рис. 3.2-16.
Пример 3.2-9

Рис. 3.2-9. Синусоида, построенная c помощью функции fplot
Функция fplot умеет возвращать значения компонентов векторов х и у, если к ней обратиться следующим образом:
[х у] = fplot(@sin, [0 2*pi]);
В этом случае кривая не рисуется, а соответствующие координаты заносятся в массивы xиyсоответственно.
Функция f, указываемая в качестве первого аргумента fplot, кроме независимой переменной хможет содержать дополнительные параметры, например, y=f(x,a1,a2). Тогда эти параметры указываются среди дополнительных аргументов после задания относительной погрешности и минимального числа точек:
fplot(‘nanie_fun’, [xl х2], 0.05, 20, al, a2)
Рассмотрим Пример 3.2-10, результат которого отображен на рис. 3.2 -10.
Пример 3.2-10

Рис. 3.2-10. Примеры работы функции fplot
Функция fplot()предоставляет альтернативную возможность изображения функций по сравнению с вычислением вектораyпоxи последующим изображением этой кривой с помощью функцииplot().Эта функция бывает особенно полезной, когда кривая имеет несколько разных скоростей изменения и заранее не ясно, в скольких и каких точках необходимо вычислять и выводить кривую. Этой функции необходимо передавать строку, описывающую требуемую функцию в видеf(x).Строка, описывающаяf(x), может содержать любые допустимые вMatLabоперации и/или функции. Функцияf(x)должна возвращать вектор той же размерности, что иx, или матрицу, каждый столбец которой имеет столько же элементов, сколько иx.
Например, для того чтобы нарисовать кривую y = sin(x)•cos(2x)в диапазонеxот0до5π, необходимо вызвать функциюfplot (’sin(x) .*cos(2x)’, [0 5*pi]).
График с двумя осями ординат(одна ось отображается слева, другая ось справа) реализуется функциейplotyy(x1,y1,x2,y2)и той же функцией с добавлением параметров масштабирования‘f1’или‘f1′,’f2’, в роли которых могут выступатьplot, semilogx,semilogx, loglog(рис.3.2-11).
Пример 3.2-11
Рис. 3.2-11. Графическое окно с двумя осями координат
Для размещения различных надписей на полученном рисунке применяют функции xlabel, ylabel, titleиtext.Функцияxlabelпредназначена для размещения горизонтальной оси, функцияylabel– названия вертикальной оси. Для размещения надписи в произвольном месте рисунка используется функцияtext, а общий заголовок для графика выводится функциейtitle.Кроме того, используя командуgridonможно нанести измерительную сетку.
Рассмотрим пример 3.2-12, результат которого приведен на рис.3.2-12.
Пример 3.2-12
>> title (‘График sin(x)’);
>>xlabel(‘осьх’);

В системе MatLabсуществует функция, которая создает ступенчатое изображение ваших данных. Например, вместо соединения каждой пары точек из векторов аргументов прямыми линиями (как это делает функция plot()илиline()) функцияstairs()изображает ваши данные в виде горизонтальных отрезков на уровнеyi,причем каждый отрезок горизонтальной линии длится отiдоi + 1, если обращение имеет видstairs(y),и отxiдоxi+1, если обращение имеет видstairs(x,y).Значенияxiне должны быть равноотстоящими и не должны быть упорядочены по возрастанию. Вывод графика на экран можно предотвратить, используя обращение вида[xs,ys]=stairs(x,y).Потом этот график может быть выведен на экран с помощью командыplot(),line()или другим каким-нибудь способом.
Как подписать оси в матлабе на графике
Для построения двумерных графиков можно воспользоваться функцие plot следующей структуры:
> plot (x1, y1, s1, x2, y2, s2, x3, y3, s3, …),
где x 1, x 2, x 3,… – аргументы функций, y 1, y 2, y 3, … – имена функций или массивов значений ординат функций, строковые константы s 1, s 2, s 3,… определяют тип линий графика (цвет и тип линии, а также символ, отображающий точки на графике). Значения параметра si , определяющего параметры линии выводимого графика:
Как подписать оси в матлабе на графике
Пакет MatLab позволяет отображать графики с разным цветом и типом линий, показывать или скрывать сетку на графике, выполнять подпись осей и графика в целом, создавать легенду и многое другое. В данном параграфе рассмотрим наиболее важные функции, позволяющие делать такие оформления на примере двумерных графиков.
Функция plot() позволяет менять цвет и тип отображаемой линии. Для этого, используются дополнительные параметры, которые записываются следующим образом:
plot(<x>, <y>, <’цвет линии, тип линии, маркер точек’>);
Обратите внимание, что третий параметр записывается в апострофах и имеет обозначения, приведенные в таблицах 3.1-3.3. Маркеры, указанные ниже записываются подряд друг за другом, например,
‘ko’ – на графике отображает черными кружками точки графика,
‘ko-‘ – рисует график черной линией и проставляет точки в виде кружков.
Ниже показаны примеры записи функции plot() с разным набором маркеров.
x = 0:0.1:2*pi;
y = sin(x);
subplot(2,2,1); plot(x,y,’r-‘);
subplot(2,2,2); plot(x,y,’r-‘,x,y,’ko’);
subplot(2,2,3); plot(y,’b—‘);
subplot(2,2,4); plot(y,’b—+’);
Результат работы фрагмента программы приведен на рис. 3.7. Представленный пример показывает, каким образом можно комбинировать маркеры для достижения требуемого результата. А на рис. 3.7 наглядно видно к каким визуальным эффектам приводят разные маркеры, используемые в программе. Следует особо отметить, что в четвертой строчке программы по сути отображаются два графика: первый рисуется красным цветом и непрерывной линией, а второй черными кружками заданных точек графика. Остальные варианты записи маркеров очевидны.
Рис. 3.7. Примеры отображения графиков с разными типами маркеров
Из примеров рис. 3.7 видно, что масштаб графиков по оси Ox несколько больше реальных значений. Дело в том, что система MatLab автоматически масштабирует систему координат для полного представления данных. Однако такая автоматическая настройка не всегда может удовлетворять интересам пользователя. Иногда требуется выделить отдельный фрагмент графика и только его показать целиком. Для этого используется функция axis() языка MatLab, которая имеет следующий синтаксис:
axis( [ xmin, xmax, ymin, ymax ] ),
где название указанных параметров говорят сами за себя.
Воспользуемся данной функцией для отображения графика функции синуса в пределах от 0 до :
x = 0:0.1:2*pi;
y = sin(x);
subplot(1,2,1);
plot(x,y);
axis([0 2*pi -1 1]);
subplot(1,2,2);
plot(x,y);
axis([0 pi 0 1]);
Из результата работы программы (рис. 3.8) видно, что несмотря на то, что функция синуса задана в диапазоне от 0 до , с помощью функции axis() можно отобразить как весь график, так и его фрагмент в пределах от 0 до .
Рис. 3.8. Пример работы функции axis()
В заключении данного параграфа рассмотрим возможности создания подписей графиков, осей и отображения сетки на графике. Для этого используются функции языка MatLab, перечисленные в табл. 3.4.
Рассмотрим работу данных функций в следующем примере:
x = 0:0.1:2*pi;
y = sin(x);
plot(x,y);
axis([0 2*pi -1 1]);
grid on;
title(‘The graphic of sin(x) function’);
xlabel(‘The coordinate of Ox’);
ylabel(‘The coordinate of Oy’);
text(3.05,0.16,’leftarrow sin(x)’);
Из результата работы данной программы, представленного на рис. 3.9, видно каким образом работают функции создания подписей на графике, а также отображение сетки графика.
Таким образом, используя описанный набор функций и параметров, можно достичь желаемого способа оформления графиков в системе MatLab.