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-файл.
- печать рисунков в формате PDF
- создать
LaTeX
код, который включает в себя цифры - компилировать с
PDFLaTeX
ниже доказательство концепции который принимает имя файла как char
и несколько function_handle
s и создает 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, есть много обходных путей
создание pdf-файлов для каждой фигуры и объединить их с помощью программного обеспечения, которые легко доступны.
есть скрипт под названием Export_fig (http://www.mathworks.com/matlabcentral/fileexchange/23629), который может сохранять цифры в одном pdf
- сохранить все цифры .ps формат и конвертировать .ps в PDF (я нахожу довольно проста в использовании). тест имени ='.ПС'; печать ('- dpsc2', fname, '- f1' ) print ('- dpsc2', fname,'- append',' - f2')