MATLAB сохранение нескольких фигур в PDF

есть ли способ сделать это?

Я знаю, как использовать saveas (saveas(1, filename, 'pdf');) сохранить одну цифру в PDF-файл, но можно ли добавить кратные? Что-то вроде (saveas(1,2,3) filename, 'pdf'));.

спасибо

5 ответов


Я так не думаю - вам нужно каким-то образом увеличить имя файла. Я бы использовал что-то вроде:

for ii=1:3
    saveas(ii,[filename '-' num2str(ii)],'pdf)
end

в качестве примечания, у меня были повторяющиеся трудности при включении PDF-файлов, сгенерированных matlab в рукописи. Мое текущее решение-создавать файлы eps и конвертировать их с помощью сценария оболочки.

r/


Я подумал, что, возможно, стоит отметить, что поведение, к которому вы стремитесь, может быть получено с помощью hgsave и hgload, но только если вы готовы сэкономить, используя .инжир. Документация для этих функций обманула меня на некоторое время, полагая, что они могут работать с другими расширениями (например .pdf), но я не мог получить пример для работы на моей машине (Linux Mint v12, Matlab r2012b). Возможно, кто-то другой смог бы сделать лучше. Пример работы с ним .расширение рис следует:

%# Create some example data
x = (0:10)';
y1 = (1/10) * x;
y2 = sin(x);

%# Create an array of figures and an array of axes
AllFig(1) = figure('Visible', 'off');
AllFig(2) = figure('Visible', 'off');
AllAxes(1) = axes('Parent', AllFig(1));
AllAxes(2) = axes('Parent', AllFig(2));

%# Plot the data on the appropriate axes
plot(AllAxes(1), y1);
plot(AllAxes(2), y2);

%# Save both figures to .fig in one hit using hgsave
hgsave(AllFig, 'TwoFigsOneFile.fig');

% Clear the workspace
clear

%# Load both figures in one hit using hgload
LoadFig = hgload('TwoFigsOneFile.fig');

%# Display the first figure and second figure
figure(LoadFig(1));
figure(LoadFig(2));

поздний ответ, но я подумал, что добавлю, что вы можете использовать команду publish и опубликовать в pdf. Создайте m-файл ' myfile.m ' с командами сюжета, как в

plot(x1,y1);
plot(x2,y2);

затем запустите этот файл с помощью

publish('myfile.m', 'pdf')

Это должно дать вам то, что вы хотите.


решение MATLAB-PDFLaTeX

использование MATLAB's publish command-отличное решение, как указывали другие ответы. Если вы ищете больше контроля с точки зрения того, как различные фигурки объединяются, другое решение-использовать pdflatex для компиляции фигур в один PDF-файл.

  1. печать рисунков в формате PDF
  2. создать LaTeX код, который включает в себя цифры
  3. компилировать с PDFLaTeX

ниже доказательство концепции который принимает имя файла как char и несколько function_handles и создает PDF, который содержит эти цифры.

function res = save2pdf(name,varargin)
pathToPdflatex = '/Library/TeX/texbin/pdflatex' ; 

files = cell(size(varargin)) ;
for ii = 1:numel(varargin)
    files{ii} = sprintf('%s_fig%g.pdf',name,ii) ;
    print(varargin{ii},'-dpdf','-painters',files{ii}) ;
end

fh = fopen(sprintf('%s.tex',name),'w+') ;
fprintf(fh,'\documentclass{article}\n') ;
fprintf(fh,'\usepackage{graphicx}\n') ;
fprintf(fh,'\begin{document}\n') ;
for ii = 1:numel(files)
    fprintf(fh,'\includegraphics[width=\textwidth]{%s}\n\newpage\n',files{ii}) ;
end
fprintf(fh,'\end{document}\n') ;
fclose(fh) ;

[~,res] = system(sprintf('%s %s.tex',pathToPdflatex,name)) ;
disp(res)
end

пример:

n = 1e+5 ;
x0 = cumsum(randn(n,1)) ;
x1 = cumsum(randn(n,1)) ;
f0 = figure() ;
f1 = figure() ;
ax0 = axes('Parent',f0) ;
ax1 = axes('Parent',f1) ;
plot(ax0,x0) ;
plot(ax1,x1) ;

save2pdf('my_figures',f0,f1)

вуаля:

...
Output written on my_figures.pdf (2 pages, 169718 bytes).
Transcript written on my_figures.log.

нет встроенной команды для сохранения всех фигур в одном pdf, есть много обходных путей

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

  2. есть скрипт под названием Export_fig (http://www.mathworks.com/matlabcentral/fileexchange/23629), который может сохранять цифры в одном pdf

  3. сохранить все цифры .ps формат и конвертировать .ps в PDF (я нахожу довольно проста в использовании). тест имени ='.ПС'; печать ('- dpsc2', fname, '- f1' ) print ('- dpsc2', fname,'- append',' - f2')