Построение графиков в матлаб по данным эксель

Обновлено: 05.07.2024

Статья будет полезна тем, кто оформляет графики в среде 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 профиля давлений, относящихся к левой оси. А также добавить стрелки и подписи.

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


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


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

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

Здравствуйте! Я в матлабе абсолютный новичок. Пожалуйста, помогите построить графики, как на приведенных картинках. Прикладываю также файл с данными, где желтым показаны сроки эксплуатации, а зеленым - порядковый номер кривых. Я хочу научиться строить такие графики. Если несложно, то, пожалуйста, дайте краткие комметарии того, что прописывается в каждой строке кода. Заранее спасибо всем откликнувшимся!

Файлы

  • Image 1.jpg
  • Image 2.jpg
  • Image 3.jpg
  • Практическая.xlsx

Лучший ответ


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

1. Вносите в MATLAB Ваши данные, он умеет их импортировать из exel таблиц, если это нужно. Ну или для пробы напишите в консоли команды ниже и поэкспериментируйте с тестовыми данными.

2. Переходите на вкладку plots

3. Выбираете необходимые данные в рабочем пространстве и смотрите какие графики из них можно построить.


Смотрите картинку.

Ответы Подписаться на ответы

_______ ____________

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

1. Вносите в MATLAB Ваши данные, он умеет их импортировать из exel таблиц, если это нужно. Ну или для пробы напишите в консоли команды ниже и поэкспериментируйте с тестовыми данными.

2. Переходите на вкладку plots

3. Выбираете необходимые данные в рабочем пространстве и смотрите какие графики из них можно построить.


Смотрите картинку.

Сложность в построении вызывает второй график. Строится тонкая линия.

Вы бы не могли показать, как с помощью кода выполняются эти построения.

Буду очень благодарна!

_______ ____________

А вы сначала постройте их в гуе, а потом посмотрите в консоль, там будет описание Ваших действий в виде кода. допустим я из своих a и b построил какой-то график, пусть это будет

затем пишете в консоли:

И получаете ее сигнатуру с описанием всех параметров, и сможете настроить толщину Вашей линии.

Огромноое спасибо! Если возникнут вопросы, то снова напишу! Вы бы не могли написать расшифровку кода

aBoomest

subplot(2,2,1) - размещает на фигуре поле для графика функции

Первые двкее цифры - 2,2 - две шт. по вертикали, две по горизонтали

Третья цифра- номер по порядку

Спасибо Всем, кто откликнулся! У меня получился странный трехмерный график. По оси z должны идти вероятности, по оси х - годы, а по оси y - порядковые номера. У меня все наоборот. Как их поменять местами?

aBoomest

А как строили? Например surf(X,Y,Z) - по-моему тут очевидно.

PS: Можно просто повернуть. 9-я по счету кнопочка (после кнопки с рукой). Жмете, и далее как душе угодно! А где у вас что на осях - не ясно. Ибо не всегда такой "просто поворот" возможн, если тройка меяется с правой на левую.

PSPS: предполагаю, что стоит еще почитать про функцию meshgrid.

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

aBoomest

вы файл-то приложите, или конкретные вопросы.

В файле Excel желтым показаны сроки эксплуатации, а зеленым - порядковый номер графиков.

Пожалуйста, напишите или код, или порядок действий для построения. Но очень большая просьба: в случае, если построение будет с помощью кода, дайте пояснения к действиям.

P. S. Повторно смогу приложить файлы после обеда.

Спасибо всем откликнувшимся!

aBoomest

Скачал картинку нумэр три.

все как на картинке, только развернуть (как писалось выше) и настроить колористику и внешний вид - это уж на любителя.

Спасибо! А как быть с первым и вторым графиком?

aBoomest

Откуда ж я знаю о чем эти графики и какая у вас задача?

"Я хочу научиться строить такие графики."

Построена кривуля по вашим данным из таблицы.
С виду на рис. это все разные вещи с разными данными. Хотя всяко может быть.

Нет, эти графики по одним и тем же данным.

В примере одни данные, мой расчёт дал другие данные

aBoomest

. . . о чем эти графики и какая у вас задача . . .

и вероятно это половина 1го получится.

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

aBoomest

Похоже кардинально чего-то не понимаю. По ппорядку:
1. У вас есть расчет. Его результат в таблице экселя.
Все верно?
2. Если да, то графики что получаются похожи на ваши примеры?
С виду очень похожи.
3. Вопрос дальнейший в чем, не могу уловить?

2. Я пока на работе, вечером буду пробовать.

Как я поняла, пока мне предложили решение только для 3 графика. Еще остаётся два

aBoomest, пожалуйста, скажите, что мне нужно подставлять в код, приведенный ниже, вместо "%Z - ваши данные"

%Z - ваши данные
y = 0:5:125;
x =1:24;
[X,Y] = meshgrid(x,y);
plot3(X,Y,Z);

Развернуть график не получаетя. У меня нет 9-ой кнопки после руки (скрин я приложила)

P.S. второй график я с горем построила, но линии получаются очень тонкие. Как их сделать такими же, как в примере со второй картинки?

Спасибо всем откликнувшимся!

aBoomest

Z - это массив значений из вашего экселя размером помнится 126 на 24. Судя по приложеной вами картинке, вы вроде все правильно сделали.

Вот тут вполне подробно все.

PS: Вопрос позвольте, с вашего разрешения? Вы что именно в matlab делаете? Расчеты? Модели? Или только рисование графиков, а все остальное ещё где-то (на бумаге)?

aBoomest

Завтра буду опять пытаться строить эти два графика и ещё первый. Т. е. для Z мне нужно в исходном файле выделить все значения надёжности? Как это должно выглядеть? Z=и указать диапазон ячеек. Я понимаю, что вопросы кажутся наивным, но для меня это проблема. Расчёты я делаю в Excel, как по заданию, а графики нужно построить в Matlab, используя импорт таблиц из Excel.

Когда я училась на бакалвриате у нас не было Matlab, но в магистратуре дали вот такое задание.

aBoomest

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

FP^2. Странно. Бывает же.

Т. е. для Z мне нужно в исходном файле выделить все значения надёжности?

Способов можно придумать море, возможно преподаватель хочет что-то конкретного. Стоит почитать МУ по работе. А так с ходу . . .
1. Копирнуть таблицу прямо в скрипт. Добавить кв.скобки в начале и в конце и имя переменной . . . .

2. Создать в workspace переменнную:
- пр.кнопкой в области WS - команда New.
- Задаете имя.
- Дв.нажатием открываете содержимое (пока пустое).
- CtrlC -> CtrV из экселя.

4. Думаю еще вариантов возможно . . . . .

1. Что я неправильно пишу в коде? толщина линий не меняется

2. если просто рассматривать график без изменения толщин линий, то как изменить градацию шкалы (выделено красным на рисунке). Нужно, чтобы начиналась с 0 до 125 с шагом 20 лет

3. Такая же проблема, как и в п.2, с графиком в виде поверхности. Его строю через GUI, как советовали в начале темы

Пожалуйста, подскажите, как можно решить эти вопросы.

aBoomest

1. 30 . поставьте 2 или 3. Хотя просто ради интереса попробовал 30 - тоже нормально рисует, только линии на столько толстые, что совершенно ничего не понятно.

2.1 С т.з. редактирования графика. Кнопка Show plot tools and dock figure (16-я кнопка на панели). Тыкаете (один раз) в поле графика. На вкладке (X Axis или какой вам нужно) справа на краю есть кнопка Ticks. Появится окно с таблицей.
Столбец Locatons - это значения меток где она находится (значение координаты).
Столбец Labels - это то что написано. По идее обычно они одинаковые (так по умолчанию и будет) но вы во втором столбце можете написать все что угодно.
2.2.1 С т.з. исходных данных. Если вам нужен другой шаг, так вы в своих переменных только оставьте то что вам нужно и все. Это все можно в матлаб сделать. (урезать массивы)
2.2.2 А можно и в экселе таблицу иcходную . . . переделайте так как вам надо.

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

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

Из-за ограниченного объема данного справочного пособия в него включены только графические команды и функции с минимальными элементами дескрипторной графики. Заинтересованному читателю следует обратиться к документации по системе MATLAB, и в первую очередь к только что вышедшей из печати книге “Using MATLAB Graphics” (Natick, 1996).

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

Для каждого графика можно задать заголовок, нанести обозначение осей и масштабную сетку.

В системе MATLAB предусмотрено несколько команд и функций для построения трехмерных графиков. Значения элементов числового массива рассматриваются как z-координаты точек над плоскостью, определяемой координатами x и y. Возможно несколько способов соединения этих точек. Первый из них - это соединение точек в сечении (функция plot3), второй - построение сетчатых поверхностей (функции mesh и surf). Поверхность, построенная с помощью функции mesh, - это сетчатая поверхность, ячейки которой имеют цвет фона, а их границы могут иметь цвет, который определяется свойством EdgeColor графического объекта surface. Поверхность, построенная с помощью функции surf, - это сетчатая поверхность, у которой может быть задан цвет не только границы, но и ячейки; последнее управляется свойством FaceColor графического объекта surface. Уровень изложения данной книги не требует от читателя знания объектно-ориентированного программирования. Ее объем не позволяет в полной мере описать графическую подсистему, которая построена на таком подходе. Заинтересованному читателю рекомендуем обратиться к документации по системе MATLAB, и в первую очередь к только что вышедшей из печати книге Using MATLAB Graphics (Natick, 1996).

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

PLOT - график в линейном масштабе

plot(y)
plot(x, y)
plot(x, y, s)
plot(x1, y1, s1, x2, y2, s2, . )

Команда plot(y) строит график элементов одномерного массива y в зависимости от номера элемента; если элементы массива y комплексные, то строится график plot(real(y), imag(y)). Если Y - двумерный действительный массив, то строятся графики для столбцов; в случае комплексных элементов их мнимые части игнорируются.

Команда plot(x, y) соответствует построению обычной функции, когда одномерный массив x соответствует значениям аргумента, а одномерный массив y - значениям функции. Когда один из массивов X или Y либо оба двумерные, реализуются следующие построения:

  • если массив Y двумерный, а массив x одномерный, то строятся графики для столбцов массива Y в зависимости от элементов вектора x;
  • если двумерным является массив X, а массив y одномерный, то строятся графики столбцов массива X в зависимости от элементов вектора y;
  • если оба массива X и Y двумерные, то строятся зависимости столбцов массива Y от столбцов массива X.

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

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

Команда plot(x1, y1, s1, x2, y2, s2, . ) позволяет объединить на одном графике несколько функций y1(x1), y2(x2), . определив для каждой из них свой способ отображения.

Обращение к командам plot вида plot(x, y, s1, x, y, s2) позволяет для графика y(x) определить дополнительные свойства, для указания которых применения одной строковой переменной s1 недостаточно, например при задании разных цветов для линии и для точек на ней.

Примеры:

Построим график функции y = sin(x) на отрезке [- p p ] с шагом p /500:

x = -pi:pi/500:pi;
y = sin(x);
plot(y) % рис. а
plot(x, y) % рис. б

График на рис. а отображает значения одномерного массива y, состоящего из 1001 элемента, как функцию от номера элемента; график на рис. б отображает значения того же массива как функцию элементов массива x.

Рассмотрим различные способы применения функции plot(x, y) на примере графиков двух функций y1 = sin(x) и y2 = xsin(x):

x1 = -pi:pi/500:pi;
y1 = sin(x1);
y2 = x1.*sin(x1);
plot(x1',[y1' y2']) % рис. в
plot( [y1' y2'], x1') % рис. г

x2 = x1/2;
y2 = x2.*sin(x2);
plot([x1' x2'], [y1' y2']) % рис. д

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

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

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


Затем необходимо настроить размер графика и его положение на экране, например, с отображением на весь экран:


При необходимости вставляем название графика:


Далее можно включить построение нескольких графиков в одном окне, c использованием тех же осей и свойств графика:


Строим графики с определенным цветом, стилем и толщиной линии:


Вставляем легенду в график с определенным положением на рисунке, например справа внизу:



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

Чтобы не изменять вручную все значения подписей данных осей через меню графика,

Код «прореживает» подписи осей x и y, а также исправляет точки на запятые в подписях на оси y. Для других осей необходимо повторить аналогичные процедуры.

И в заключении отобразим линии координатной сетки:


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

Выполним с заранее подготовленными данными.

В результате получаем вот такой график:


По умолчанию MatLab отображает греческую букву «фи» как в кириллице «ф». Одним из способов отобразить привычную греческую букву «фи» с петлеобразным начертанием, является выбор специального шрифта c греческими буквами. Скачиваем, например, шрифт Greek Normal отсюда и устанавливаем. Просмотрев шрифт Greek в таблице символов, замечаем, что в этом шрифте буква «фи» существует в двух вариантах, причем для кода латинской «f» получим тот же результат что и в MatLab в виде «ф», а для кода латинской «j» должен быть получен требуемый результат.



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

  • Решить проблему с некорректным отображением кириллических шрифтов;
  • Автоматически заменить разделитель целой и дробной части числа с точки на запятую в графике;
  • Отобразить греческую букву фи в петлеобразном начертании.

UPD Еще один способ, подсказанный в комментариях, для отображения «фи» с петлеобразным начертанием:

Читайте также: