0

在 Matlab 中,我有两个要包含在乳胶文档中的图。我可以使用以下代码更改每个绘图的大小以及其他所有内容:

set(1, 'units', 'centimeters', 'position', [0 0 10 8]);
set(get(gca,'xlabel'),'string','cutoff','fontsize',14,'fontname','Bitstream Vera Serif');
set(get(gca,'ylabel'),'string','F-score','fontsize',14,'fontname','Bitstream Vera Serif');
set(gca,'fontsize',14,'fontname','Bitstream Vera Serif');
print(1,'-depsc','-r300',[dir_name filenames{f} method{m} '_comb']);

这会将我的绘图保存到正确大小的 .eps 文件中,并在乳胶中以正确的大小完美加载。但是,我希望在保持轴大小的同时将两个图都放在子图中。上面的代码不起作用,因为打印的子图似乎忽略了轴的大小,并且在乳胶中总是以相同的大小显示(不管我为轴制作的数字有多大,都没有关系)。

如何确保 Matlab 以正确的尺寸打印子图?也许值得注意:子图的大小在生成图时确实在屏幕上发生了变化,但这被乳胶忽略了,即使它在不使用子图时工作正常。

- 编辑 -

经过一番摆弄,我能够为我拥有的代码提供一个最小的工作示例。

X1 = sort(rand(30,1));
Y1 = sort(rand(30,1));

X2 = sort(rand(30,1));
Y2 = sort(rand(30,1));

subplot(2,1,1)
 plot(X1,Y1,'gs','LineWidth',0.5,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',2)
axis([0 1 0 1]);
highX = X1(:,1)>=0.8;
for K = 1 : size(X1,1)
    if highX(K) == 1
        line(X1(K,1),Y1(K,1),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',9,'MarkerEdgeColor','k');
    end
end
set(1, 'units', 'centimeters', 'position', [2 2 15 15]);

subplot(2,1,2)
plot(X2,Y2,'gs','LineWidth',0.5,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',2)
axis([0 1 0 1]);
highX = X2(:,1)>=0.8;
for K = 1 : size(X2,1)
    if highX(K) == 1
        line(X2(K,1),Y2(K,1),'color',[.3 .5 .7],'marker','o','linestyle','none','markersize',9,'MarkerEdgeColor','k');
    end
end
set(1, 'units', 'centimeters', 'position', [2 2 15 15]);

print(1,'-depsc','-r300','test');

这会产生 2 个标有一些坐标的图。在乳胶中,我像这样加载文件:

\documentclass{article}
\usepackage{graphicx,epstopdf}
\begin{document}
    \begin{figure}[H]
        \centering
        \includegraphics[width=1\linewidth]{test.eps}
        \caption{Caption}
        \label{fig:label}
    \end{figure}
\end{document}
4

2 回答 2

2

我不知道诸如 plot 之类的类似状态的函数,或者subplot执行您所要求的操作,但是,如果您对直接使用数据对象感到满意,那么您可以直接对轴对象进行更改。就个人而言,我认为经过一些练习后,您可以通过直接操作它们获得更好的结果。

Axis 对象是图形的一部分,用于处理在大多数人通常使用的函数(例如plot和)的背景中绘制绘图的工作scatter。当我需要执行您所要求的事情时,我会执行以下操作。

% Get the image objects
f = figure();
a1 = axes('Parent', f);
a2 = axes('Parent',f);

% Use builtins to make the plots
plot(a1, [1:10]);
plot(a2, [1:10], [1:5,4:-1:1]);

% I think that it is best to add labels and titles here too
% That way you can make sure that everything fits correctly

% Make everything fit
% Position is [left, bottom, width, height]
set( a1, 'units', 'centimeters', 'position', [1, 1,10, 8] );
set( a2, 'units', 'centimeters', 'position', [1,10,10, 8] );
set(  f, 'units', 'centimeters', 'position', [0, 0,12,19] );
于 2013-06-20T02:08:34.527 回答
1

问题

如果图形包含子图,则在打印到 .eps 时不会保留图形的大小print(),除非您指定:

set(gcf, 'PaperPositionMode','auto')
于 2013-06-20T14:52:34.363 回答