О последнем пункте и пойдет речь в статье. Как это ни странно, Matlab для создания графиков довольно плох (особенно по меркам современности). Казалось бы, создание графиков в Matlab должно быть козырем программы. Но графики в Matlab обладают рядом изъянов. И это не только «вина» разработчиков Matlab, но и особенности аккумулируемых в Matlab технологий для производства этих графиков.
Создание графиков в Matlab
Одной из лучших статей по теме является запись в блоге одного из разработчиков Matlab — Loren Shure.
Для быстрого ознакомления с графикой в Matlab рекомендую ознакомиться со статьей выше.
Чтобы автоматизировать большинство нужных операций для создания красивых графиков, можно внести изменения в файл startup.m (в папке MatlabFolder/toolbox/local). Этот файл содержит пользовательские настройки, которые подключаются при запуске Matlab.
Для редактирования файла startup.m можно в консоли Matlab набрать команду:
edit startup
В файле startup.m я использую следующие настройки:
Сохранение и восстановление рабочей среды. Основы работы в MATLAB. Урок 5
% % 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’ ) ;
plot ( x , y , ‘—r’ , ‘DisplayName’ , ‘y(x)’ ) ;
legend ( ‘show’ ) ;
Для создания легенды рекомендую использовать сразу в команде plot (и других подобных) ключ DisplayName. Ключ FileName нужен для того, чтобы сразу задать имя файла, в который будет сохранен рисунок.
Когда график создан, нужно сохранить его в родной формат Matlab — fig-файл. И тут начинаются проблемы. Дело в том, что Matlab по какому-то странному стечению обстоятельств, не сохраняет положение xlabel и ylabel в fig-файле (т.е. Matlab не считает подписи под осями частью рисунка!). Это странное поведение не позволяет при необходимости с легкостью вносить изменения в уже готовый fig-файл.
Так как при каждом открытии fig-файла ряд добавленных вручную свойств (те же положение меток xlabel) просто пропадают. Ситуация становится критической, когда нужно обработать несколько графиков, которые должны быть однотипными (т.е. в них, например, должны изменяться только кривые y(x), но не положение подписей к рисунку).
М-файлы. Работа в редакторе М-файлов. Часть 1. Урок 49
Экспорт графиков из 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 по умолчанию для любой новой фигуры командой:
Источник: www.engineerbox.ru
Русские Блоги
Если изображение img, вы можете использовать imwrite (img, ‘result.jpg’); этот метод сохраняет размер изображения и размер дисплея одинаковыми. Размер изображения, полученного с помощью следующего метода, отличается от исходного изображения, ниже приводится изображение, сохраненное этим методом.
Как сохранить рисунок MATLAB в формате JPEG с помощью saveas (), чтобы изображение не получалось плохо?
В MATLAB-функции я пишу, я генерирую цифру. Эта цифра отображается, когда функция выполняется. Мне нужно сохранить фигуру как изображение в формате JPEG. Для этого я мог бы сделать File- > Save As в окне рисунка, в котором отображается рисунок. Но я бы хотел автоматизировать это.
Я попытался сделать это, используя функцию saveas(). Проблема в том, что результирующее изображение нежелательно. Вот изображения для демонстрационной проблемы, чтобы показать вам, что я имею в виду: JPEG-изображение сохранено вручную с помощью File- > Save As в окне фигуры MATLAB:

function JpgSaveIssueDemo( ) figure( 1 ); t = 0:0.1:8; subplot( 2, 2, 1 ); plot( t, sin(t) ); title( ‘Plot 1 of Example to Demonstrate JPG Save Issue’, ‘FontSize’, 18 ); subplot( 2, 2, 2 ); plot( t, sin(t) ); title( ‘Plot 2 of Example to Demonstrate JPG Save Issue’, ‘FontSize’, 18 ); subplot( 2, 2, 3 ); plot( t, sin(t) ); title( ‘Plot 3 of Example to Demonstrate JPG Save Issue’, ‘FontSize’, 18 ); subplot( 2, 2, 4 ); plot( t, sin(t) ); title( ‘Plot 4 of Example to Demonstrate JPG Save Issue’, ‘FontSize’, 18 ); saveas( gcf, ‘DemoPlot’, ‘jpg’ ); end
Показатель, отображаемый при выполнении JpgSaveIssueDemo(), не максимизируется. Итак, я подумал, что если бы я мог максимизировать его с помощью вызова функции /s в JpgSaveIssueDemo() до выполнения функции saveas(), то сохраненное изображение JPEG получилось бы хорошо. Итак, я использовал этот код перед строкой saveas() в JpgSaveIssueDemo(), чтобы максимизировать цифру:
drawnow; jFrame = get(handle(gcf),’JavaFrame’); jFrame.setMaximized(true);
Затем отображаемая фигура максимизируется. Однако результат тот же: изображение JPEG по-прежнему выходит нежелательно. Что можно сделать для этого?
GigaRohan 13 апр. 2013, в 06:34
Поделиться
Частичное решение: Jpg — неправильный тип изображения для этого. Квадраты мусора рядом с линией на изображении являются артефактами сжатия jpg. Используйте jpg для таких вещей, как фотографии, используйте png для таких вещей, как графики. Формат png даст вам лучшее качество и меньший размер файла.
Источник: overcoder.net