Progress-servis55.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
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. Эта функция позволяет разбить область вывода графической информации на несколько подобластей, в каждую из которых можно вывести графики различных функций.

Читать еще:  Matlab математические функции

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

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

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

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

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

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

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

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

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

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

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

MATLAB: как построить график нескольких функций на одном графике?

Как я могу построить график нескольких функций на одной плоскости graph/plot/Cartesian на MATLAB с ограничениями домена и диапазона?

Например, я составил следующие функции ниже. Как бы я изобразил следующее на том же графике в пределах MATLAB?

1 Ответ

Matlab-это среда численных вычислений, поэтому вам нужно будет сказать ему, что вы ищете во время построения графика.

В случае вашего первого примера вам нужно будет указать ему, какое значение Y соответствует plot. Поскольку X всегда один и тот же, вы знаете, что это будет линия — так что двух точек будет достаточно. Plot требует параллельных массивов, поэтому:

Функция 1: x = [-3 -3]; y = [10 14]; plot(x, y);

Для plot дополнительных линий на том же графике используйте команду hold on , которая применяется к только что построенной фигуре. Если вы этого не сделаете, новые команды plot сотрут старые участки.

Функция 2: x = [-5 4]; y = -2*x; plot(x, y);

Для кругов/эллипсов, таких как #3, ezplot , может быть полезно, хотя вам все равно нужно указать диапазон.

Функция 3: ezplot(‘x^2 + (y-12)^2 — 2.25’, [-3,3,10,14])

Последнее легко, но давайте вместо этого предположим, что это кривая. Вы бы хотели, чтобы plot было больше, чем просто два значения X. Вы можете создать вектор из такого диапазона: x = -1:0.1:1; или равномерно распределенного набора точек от -1 до 1 с интервалом 0.1. Допустим, вы хотите сделать plot на том же графике, и вы уже сделали hold on . Если вам нужен другой цвет и вы хотите показать отдельные точки, составляющие линию, вы можете использовать третий аргумент для функции plot:

Функция 4: x = -1:0.1:1; y = 4 * ones(length(x)); plot(x, y, ‘-r.’);

Вторая команда здесь, y = 4 * ones(length(x)); , просто создает вектор y, который имеет ту же длину, что и x.

Похожие вопросы:

Я новичок в matlab, и я пытаюсь построить несколько функций на одном графике, чтобы сравнить их скорость роста: n = [1:100]; plot(n, 2.^(2.^n), ‘b’) hold plot(n, 2.^n, ‘r’); hold plot(n, n.^log2(n).

У меня есть этот вопрос, Как добавить точки На графике 2D, как на следующем рисунке. https://www.dropbox.com/s/rs501qkwqqk8qgk/abc.jpg (необходимо добавить белые точки и текст на приведенном выше.

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

Я хочу построить график двух функций на одном и том же графике в Excel. Функции не имеют одинаковых значений для X (но они близки). Далее, у меня есть 5 точек (пар) для первой функции и 7 точек.

У меня есть следующая проблема: Я использую hist() в matplotlib.pyplot Я пытаюсь создать 4 гистограммы на одном графике. и приближение Гаусса для каждого из них. как я могу построить 4 гистограммы.

Поэтому у меня есть 2 модели для набора данных, который я использую: > Bears1Fit1 > Bears2Fit2 <- lm(Weight

Neck.G + I(Neck.G)^2) Я хочу построить эти две.

У меня есть dataframe, как указано ниже: Date,Time,Price,Volume 31/01/2019,09:15:00,10691.50,600 31/01/2019,09:15:01,10709.90,13950 31/01/2019,09:15:02,10701.95,9600.

Я работаю над программой R Shiny, которая может взять любой файл csv и вывести его графики. Пользователь, который загружает csv, имеет некоторые рекомендации о том, как должны выглядеть данные, но я.

Я попытался объединить график акций и линейный график с помощью excel . Но это невозможно. Я могу нарисовать график акций и линейный график отдельно. Кто-нибудь знает способ дарв график акций и.

Мне дали домашнее задание построить график функции x^3 и 3^x в одном графике. Может ли кто-нибудь помочь мне с этим упражнением, пожалуйста?

Есть ли способ построить простой график в sas без использования набора данных? например, что-то вроде y=x^2. Как насчет нескольких функций в одном графике? Я чувствую, что это должно быть что-то.

Вывод нескольких графиков на одни оси в Matlab

Для отображения нескольких графиков функций одной переменной на одних осях использовались возможности функций plot, plotyy, semilogx, semilogy, loglog. Они позволяют выводить графики нескольких функций, задавая соответствующие векторные аргументы парами, например plot(x,f,x,g). Однако для объединения трехмерных графиков их использовать нельзя. Для объединения таких графиков предназначена команда hold on, которую нужно задать перед построением графика. В следующем примере объединение двух графиков (плоскости и конуса) приводит к их пересечению. Конус задается параметрически следующими зависимостями:

, , , .

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

Далее формируются матрицы X, Y, содержащие значения функций и в точках, соответствующих значениям параметров. Формирование матриц выполняется с помощью внешнего произведения векторов.

Замечание 2

Внешним произведением векторов , называется матрица размера N х M, элементы которой вычисляются по формуле .

Вектор а является вектор-столбцом ив MatLab представляется в виде двумерного массива размера N на один. Вектор-столбец bпри транспонировании переходит в вектор-строку размера один на М. Вектор-столбец и вектор-строка есть матрицы, у которых один из размеров равен единице. Фактически, С = abT, где умножение происходит по правилу матричного произведения. Для вычисления матричного произведения в MatLab используется оператор «звездочка». Определим внешнее произведение для двух векторов:

» a = [1;2;3];
» b = [5;6;7];
» C = a*b’
C =
5 6 7
10 12 14
15 18 21

Сформируем матрицы X,Y, необходимые для графического отображения конуса:

» X = 0.3*u*cos(v);
» Y = 0.3*u*sin(v);

Матрица Z должна быть того же размера, что и матрицы X иY. Кроме того, она должна содержать значения, соответствующие значениям параметров. Если бы в функцию входило произведение и и v, то матрицу Z можно было заполнить аналогично матрицам Xи Yпри помощи внешнего произведения. С другой стороны, функцию z(u,v)можно представить в виде , где . Поэтому для вычисления Zможно применить внешнее произведение векторов и , где вектор-строка имеет ту же размерность, что v, но состоит из единиц:

Все требуемые матрицы для отображения конуса созданы. Задание плоскости выполняется следующим образом:

» [X,Y] = meshgrid(-2:0.1:2);
» Z = 0.5*X+0.4*Y;

Теперь не сложно записать и полную последовательность команд для построения пересекающихся конуса и плоскости:

Читать еще:  Число в строку matlab

» u = [-2*pi:0.1*pi:2*pi]’;
» v = [-2*pi:0.1*pi:2*pi];
» X = 0.3*u*cos(v);
» Y = 0.3*u*sin(v);
» Z = 0.6*u*ones(size(v));
» surf(X, Y, Z)
» [X,Y] = meshgrid(-2:0.1:2);
» Z = 0.5*X+0.4*Y;
» hold on
» mesh(X, Y, Z)
» hidden off

Команда hidden off применена для того, чтобы показать часть конуса, находящуюся под плоскостью.

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

» plot(х,f)
» hold on
» plot(x,g)

Построение графиков с двумя независимыми осями в 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 стал подходящей программой для подготовки графиков к публикации статей в различных научных журналах. Важным плюсом является очень хорошая гибкость этого инструмента, позволяющая обрабатывать результаты и представлять их в удобоваримом и красивом виде, в том числе и для т.н. «пакетной» обработки.

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