Фигуры MATLAB не имеют того же размера при вставке в LaTeX (хотя созданы с использованием того же кода) - PullRequest
2 голосов
/ 27 мая 2020

Я создаю несколько фигур в MATLAB и пытаюсь вставить их в LaTeX. Однако, когда я это делаю, они обычно не имеют одинакового размера (хотя я использую ту же настройку для их производства).

Например:

enter image description here

Код MATLAB, который я сейчас использую, - это

lsize = 16; % Label fontsize
nsize = 16; % Axis fontsize

q=randn(100,1000);

a1=linspace(1,1000,1000);
b1=linspace(2,2000,1000);


figure (1)

histogram(q)

xlabel('Time [sec]','Fontsize', lsize)
ylabel('W_{kin} [keV]','Fontsize', lsize)

set(gca, 'Fontsize', nsize)
set(gcf,'paperpositionmode','auto');
set(gcf,'windowstyle','normal');
set(gca,'LooseInset',max(get(gca,'TightInset'), 0.02))
set(gca,'fontweight','normal')


opts.Colors     = get(groot,'defaultAxesColorOrder');
opts.saveFolder = 'img/';
opts.width      = 12;
opts.height     = 10;
opts.fontType   = 'Times';

saveas(gcf,'f1.png')

figure(2)

loglog(a1,b1)
xlabel('time [sec]','Fontsize', lsize)
ylabel('Speed [m/sec]','Fontsize', lsize)

set(gca, 'Fontsize', nsize)
set(gcf,'paperpositionmode','auto');
set(gcf,'windowstyle','normal');
set(gca,'LooseInset',max(get(gca,'TightInset'), 0.02))
set(gca,'fontweight','normal')


opts.Colors     = get(groot,'defaultAxesColorOrder');
opts.saveFolder = 'img/';
opts.width      = 12;
opts.height     = 10;
opts.fontType   = 'Times';

saveas(gcf,'f2.png')

Я использую латексный код:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}   % needed for figures

\begin{document}

\begin{figure}[!ht]
     \begin{center}

         \includegraphics[width=0.3\textwidth]{f2.png}\\ 

         \includegraphics[width=0.3\textwidth]{f1.png}


     \caption {A caption}\label{A_label}
     \end{center}
     \end{figure}

\end{document}

Я делаю что-то не так ?

1 Ответ

2 голосов
/ 27 мая 2020

У меня была аналогичная проблема при попытке построить массив данных в LaTeX (для чего он не предназначен), поэтому я хотел нарисовать фигуры в MATLAB и расположить их (и оси) в LaTeX. Поэтому я print редактировал их как файлы PDF.

Уловка, чтобы всегда соответствовать точным размерам фигур, состоит в том, чтобы заставить оси заполнять всю фигуру set(gca,'position',[0 0 1 1]). Вам нужно будет нарисовать оси, отметки и метки в LaTeX (не забудьте использовать здесь параметр axis on top в pgfplots).

function printFig2PDF(fh,FigName,FigWidth,FigHeight)
%% export MATLAB-figure as PDF

Format = 'pdf';

% check if input name has an extension
lst = strsplit(FigName,'.');
if ~strcmpi(lst{end},Format)
    % append format
    FigName = strcat(FigName,'.',lower(Format));
end

%% adjust figure
if ~isempty(fh.ax.Legend)
    fh.ax.Legend.Visible = 'off';
end
fh.ax.Box = 'off';
set(    fh.ax, 'YTickLabel',{},'XTickLabel',{});
set(    fh.ax, 'yColor','none','xColor','none');


set(fh.ax, 'Position',[0 0 1 1])

set(fh.fig, 'PaperUnits','centimeters',...
        'PaperPosition',[0 0 FigWidth FigHeight],...
        'PaperSize',[FigWidth FigHeight]);

% save as PDF
print(fh.fig,FigName,'-dpdf')
% close figure handle
close(fh.fig)
end

Обратите внимание, что я предполагаю, что первый ввод (fh) - это struct с полями fig, которые используются как дескрипторы фигуры, и ax, содержащие дескрипторы осей (именно так я сохраняю эти дескрипторы, если у меня есть несколько фигур и подзаголовков). Если вы хотите построить текущую фигуру только с одной осью, вы можете создать ее с помощью

fh = struct('fig',gcf, 'ax',gca);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...