插入 LaTeX 时,MATLAB 图形的大小不同(尽管使用相同的代码生成)
MATLAB figures don't have the same size when inserted in LaTeX (Although produced using the same code)
我正在 MATLAB 中生成一些图形并尝试将它们插入 LaTeX 中。然而,当我这样做时,它们通常没有相同的尺寸(尽管我使用相同的设置来生产它们)。
例如:
我目前使用的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}
我是不是做错了什么?
我在尝试在 LaTeX 中绘制大量数据时遇到了类似的问题(它不是为此而设计的)所以我想在 MATLAB 中绘制图形并在 LaTeX 中排列它们(和轴)。所以我 print
将它们编辑为 PDF。
始终满足精确图形大小的技巧是使坐标轴用 set(gca,'position',[0 0 1 1])
填充整个图形。您需要在 LaTeX 中绘制坐标轴、刻度和标签(记得在 pgfplots
中使用选项 axis on top
)。
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);
我正在 MATLAB 中生成一些图形并尝试将它们插入 LaTeX 中。然而,当我这样做时,它们通常没有相同的尺寸(尽管我使用相同的设置来生产它们)。
例如:
我目前使用的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}
我是不是做错了什么?
我在尝试在 LaTeX 中绘制大量数据时遇到了类似的问题(它不是为此而设计的)所以我想在 MATLAB 中绘制图形并在 LaTeX 中排列它们(和轴)。所以我 print
将它们编辑为 PDF。
始终满足精确图形大小的技巧是使坐标轴用 set(gca,'position',[0 0 1 1])
填充整个图形。您需要在 LaTeX 中绘制坐标轴、刻度和标签(记得在 pgfplots
中使用选项 axis on top
)。
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);