На главнуюКонтактыКарта сайта
В коробке инженера
В коробке инженера
Обзоры программ, интересных блогов и программирование
Заметки о Rastrwin, Matlab
  • Twitter Colee

Заметки про Matlab. Экспорт графиков.

Автор: priester | Рубрика: Заметки » Программы » Matlab
Вторник, 4 декабря 2012 г.
Теги: , Просмотров: 23135

Зачем вообще нужен Matlab?

  • Матричная лаборатория - все операции с матрицами.
  • Простые скрипты для несложных расчетов. Matlab лучше всего подходит там, где можно все векторизовать.
  • Использование готовых функций Matlab. Т.е. готовых наборов программ, т.н. toolboxes - например, Image Processing Toolbox - это готовые алгоритмы для работы с изображениями.
  • Создание графиков.

О последнем пункте и пойдет речь в статье. Как это ни странно, Matlab для создания графиков довольно плох (особенно по меркам современности). Казалось бы, создание графиков в Matlab должно быть козырем программы. Но графики в Matlab обладают рядом изъянов. И это не только "вина" разработчиков Matlab, но и особенности аккумулируемых в Matlab технологий для производства этих графиков.

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

Одной из лучших статей по теме является запись в блоге одного из разработчиков Matlab - Loren Shure.

Making Pretty Graphs

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

Чтобы автоматизировать большинство нужных операций для создания красивых графиков, можно внести изменения в файл startup.m (в папке MatlabFolder/toolbox/local). Этот файл содержит пользовательские настройки, которые подключаются при запуске Matlab.

Для редактирования файла startup.m можно в консоли Matlab набрать команду:

edit startup

В файле startup.m я использую следующие настройки:

%% Default Figure properties
set(0, 'DefaultAxesBox'       , 'on'             ,...
       'DefaultAxesFontName'  , 'Times New Roman',...
       'DefaultAxesFontSize'  , 14               ,...
       'DefaultAxesFontWeight', 'bold'           ,...
       'DefaultaxesLineWidth' , 1.5                ); 
set(0,'DefaultPatchLineWidth' , 1.5)
set(0, 'DefaultTextFontName'  , 'Times New Roman',...
       'DefaultTextFontSize'  , 14               ,...
       'DefaultTextFontWeight', 'bold'           ,...
       'DefaultLineLineWidth' , 1.5                );
set(0, 'defaultfigurecolor', [1 1 1]);

Все параметры по умолчанию, которые можно изменить в файле startup.m можно посмотреть, выполнив в консоли Matlab команду

get(0,'default')

Пример кода Matlab для создания графика

ix_max=100;
x=linspace(0,1,ix_max);
y=log(sin(x));
figure('Name','Plot x vs y','FileName','y-plot');
hold all
plot(x,y,'--r','DisplayName','y(x)');
xlabel('x');
ylabel('y');
legend('show');

Для создания легенды рекомендую использовать сразу в команде plot (и других подобных) ключ DisplayName. Ключ FileName нужен для того, чтобы сразу задать имя файла, в который будет сохранен рисунок.

Когда график создан, нужно сохранить его в родной формат Matlab - fig-файл. И тут начинаются проблемы. Дело в том, что Matlab по какому-то странному стечению обстоятельств, не сохраняет положение xlabel и ylabel в fig-файле (т.е. Matlab не считает подписи под осями частью рисунка!). Это странное поведение не позволяет при необходимости с легкостью вносить изменения в уже готовый fig-файл. Так как при каждом открытии fig-файла ряд добавленных вручную свойств (те же положение меток xlabel) просто пропадают. Ситуация становится критической, когда нужно обработать несколько графиков, которые должны быть однотипными (т.е. в них, например, должны изменяться только кривые y(x), но не положение подписей к рисунку).

Экспорт графиков из Matlab

Родная для Matlab схема экспорта графики

Matlab позволяет экспортировать рисунки в различных форматах (векторная графика - emf, wmf, pdf, eps; растр - png, bmp, jpg, tif). Для простых 2D графиков лучше использовать векторные форматы. Для сложных 3D графиков лучше использовать - png или другую растровую графику.

Для экспорта графика в Matlab у каждой фигуры в меню File->Export Setup есть ряд настроек, которые позволяют сохранить файл с заданными свойствами - шириной и высотой, размером шрифта и многое другое. Автоматизировать действие по экспорту рисунков позволяет функция export_fig, которую написал один из пользователей Matlab (Oliver Woodford).

До этого момента работа с графиками в Matlab укладывалась в следующую схему:

Построение графика-Сохранение в файл fig - Экспорт с помощью Export Setup

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

К тому же для нашей российской специфики - в графиках вместо разделителя десятичного разряда в виде точки, должна использоваться запятая. Это вносит дополнительные трудности. Так как в Matlab просто так указать на то, какой должен быть десятичный разделитель нельзя. Для этого надо "вручную" заменить точки в XTickLabel, YtickLabel свойствах осей на запятые.

Как видно, на этом этапе начинаются основные трудности.

Для 2D графиков можно предложить альтернативное решение всех проблем. Оно, конечно, как почти всегда с Matlab, оказывается в значительной мере "танцем с бубном", но оно работает и никогда не подводит.

Новая схема: используем Matlab+PowerPoint с помощью Smart PowerPoint Exporter

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

Средства: Matlab (для производства графика), PowePoint 2010 (для хранения векторной графики), Smart PowerPoint Exporter (для экспорта фигуры из Matlab в PowerPoint).

Как видно, ключевой элемент новой схемы - это Smart PowerPoint Exporter. Это отличная утилита, написанная одним из пользователей Matlab (Dmitriy Aronov).

Итак, для начала надо установить Smart PowerPoint Exporter в Matlab.

Устанавливаем Smart PowerPoint Exporter по умолчанию для любой новой фигуры командой:

pptfigure all

После этой команды в каждой новой фигуре Matlab на панели инструментов должна появиться иконка Smart PowerPoint Exporter. После нажатия на эту кнопку фигура Matlab будет переведена в PowerPoint файл (если файл открыт - то появится новый слайд с фигурой, иначе - создается новый файл PowerPoint).

К сожалению, как видно на рисунке, не все свойства из фигуры Matlab перейдут в рисунок на слайде PowerPoint, надо доделать эти свойства самостоятельно (толщина линий, шрифты).

Но после того, как все сделано, график в PowerPoint можно экспортировать в векторный (emf, wmf) или растровый формат (png, bmp, jpg, gif) с помощью команды "Сохранить как рисунок" в контекстном меню по правому клику мыши на выделенном графике. Если добавлялись новые элементы на график, нужно не забывать группировать все объекты.

Преимущества нового подхода очевидны:

  • Легко доделать график так, как нужно - используя широкие возможности PowerPoint.
  • В отличие от Matlab fig-файлов, PowerPoint не забывает ни про подписи к осям, ни про что-то другое.
  • Можно легко заменить все точки на запятые в десятичном разделителе с помощью команды PowerPoint поиск и замена.
  • В PowerPoint больше способов сделать удачные графики (например, больше типов линий).
  • В PowerPoint гораздо удобнее изменять размер шрифта, что особенно важно при создании самих презентаций, а также постеров (можно разом выделить весь рисунок и изменить шрифт сразу у всех элементов рисунка). Это же относится к ширине линий и другим параметрам.
  • Экономия времени - нужная работа делается один раз и заключается почти в одном действии - нажатии на кнопку Smart PowerPoint Exporter. 

Скачать Smart PowerPoint Exporter можно по ссылке


Поделиться с друзьями:
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com blogger.com livejournal.ru google.com yandex.ru del.icio.us

Комментариев: 1

Игорь
Комментарий отправлен 2014-08-20 в 00:54:24 · Ссылка

Нашел статью о графиках полезной для себя, хотя уже имею некоторый опыт их построения. Кроме того должен сказать, что считаю графику Matlab одной из лучших, хотя она действительно требует ручной доработки, которую автор на 90% автоматизирует. Удачи!

Оставьте комментарий!

Используйте нормальные имена

Ваш E-mail не публикуется, используется для обратной связи и для выбора аватара с сайта gravatar.com

Публикуется вместе с комментарием

усмешка LOL сыр улыбка подмигнуть ухмылка глаза в сторону в тупике удивление большое удивление малинка пустое лицо сдвинутая бровь Оо гррр ох ох неудачник смущенный больной Тау хммм бешенный злой клевый поцелуй шок крутой недовольный

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

Вы должны включить JavaScript, чтобы оставить сообщение