Форум кафедры Техники и Электрофизики Высоких Напряжений
http://tvn-moscow.ru/forum/

Сохранение графиков в векторном и растровом форматах
http://tvn-moscow.ru/forum/viewtopic.php?f=20&t=111
Страница 1 из 1

Автор:  dmatveev [ 19 апр 2009, 00:12 ]
Заголовок сообщения:  Сохранение графиков в векторном и растровом форматах

Ничего особенного, но может оказаться полезным.

При решении больших расчетных задач, часто требуется строить множество графиков для анализа (и для отчетов тоже). Функция print позволяет сохранять графики программно в файлы, в разных форматах. Наиболее востребованным, конечно, является векторный формат, в частности, Encapsulated Postcript Level 2.

Следующий код в цикле строит графики функций Бесселя I и II рода, порядок функции Бесселя определяется текущим шагом цикла. Графики сохраняются как в векторный EPS, так и в растровый PNG в указанном экранном разрешении 72 dpi (для печати лучше задать 300 dpi).

Код:
x=0:0.01:50;
for I=1:5
    %построение графика функций Бесселя I и II рода
    plot(x, [besselj(I-1,x); bessely(I-1,x)])
    axis([0 50 -3 1])
    title(['Функции Бесселя I и II рода ' num2str(I-1) '-го порядка'])
    xlabel('x');
    ylabel(['J',num2str(I-1),'(x), N',num2str(I-1),'(x)'])
    grid on
    %сохранение графиков в файлы
    epsfilename=strcat('Bessel',num2str(I),'.eps');
    print('-depsc2',epsfilename);
    pngfilename=strcat('Bessel',num2str(I),'.png');
    print('-dpng','-r72',pngfilename);
end

На выходе будет 10 файлов:
Bessel1.eps Bessel2.eps Bessel3.eps Bessel4.eps Bessel5.eps
Bessel1.png Bessel2.png Bessel3.png Bessel4.png Bessel5.png

Bessel1.png выглядит вот так:

Изображение

И, конечно, полезно прочесть help print

Автор:  Leonid [ 19 апр 2009, 00:35 ]
Заголовок сообщения:  Re: Сохранение графиков в векторном и растровом форматах

Печать в файл? А почему не Сохранить как...?

Тогда вместо
Код:
epsfilename=strcat('Bessel',num2str(I),'.eps');
print('-depsc2',epsfilename);

получаем что-то типа
Код:
saveas(gcf, sprintf('Bessel%d.eps', I), 'epsc2')

Автор:  dmatveev [ 19 апр 2009, 00:42 ]
Заголовок сообщения:  Re: Сохранение графиков в векторном и растровом форматах

Мне казалось, что через print удобнее объяснить, тем более, что в хелпе к print прописаны все возможные опции, а к saveas - нет. И потом saveas требует хендл, а print нет.

А выигрыша в объеме кода при использовании saveas, кстати, нет. Это просто нормальная альтернатива. У тебя вот имя файла грамотно формируется, не то что у меня =)

Автор:  ivanov07 [ 27 окт 2009, 21:38 ]
Заголовок сообщения:  Re: Сохранение графиков в векторном и растровом форматах

Даниил Анатольевич, Это с помощью этой функции вы видео делаете? Сначало, насколько я понимаю, будет много-много картинок. А потом програмно их в видео соединяте? )

Автор:  dmatveev [ 27 окт 2009, 21:55 ]
Заголовок сообщения:  Re: Сохранение графиков в векторном и растровом форматах

ivanov07 писал(а):
Даниил Анатольевич, Это с помощью этой функции вы видео делаете? Сначало, насколько я понимаю, будет много-много картинок. А потом програмно их в видео соединяте? )

Можно и так. Но я делаю на лету:
Код:
% создаем объект видео-файла:
mov = avifile('filename.avi', 'fps', 25);  % fps=25 означает 25 кадров в секунду
% запускаем цикл по расчету графиков и добавлению их в видео-файл:
for J=1:N
    % рассчитываем зависимость y от x на текущем шаге
    % ..........
    plot(x,y)     % строим график на текущем шаге
    F = getframe(gcf); % забираем с текущего графика картинку для видео
    mov = addframe(mov,F); % добавляем картинку в видео-файл
end
% закрываем видео-файл, тем самым он записывается на диск:
mov = close(mov);

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/