Matlab似乎毫无理由地将该图形保存到一个非常大的eps文件中

Matlab似乎毫无理由地将该图形保存到一个非常大的eps文件中,matlab,graphics,eps,Matlab,Graphics,Eps,我的大部分作品都使用LaTeX,并且总是使用eps文件——Matlab可以创建这些文件。没有任何问题,但是,对于一个新的案例,我开始学习Matlab生成了一个95MB的文件(而eps2pdf无法生成带有该文件的pdf) 这个问题可能很难回答。这似乎是一个意外的Matlab行为,但我不能分享原始代码不幸(加上代码非常长,依赖于这么多的变量和函数…)。我曾尝试使用内置函数构建一个最低限度的工作示例,但它当然不会重现问题。尽管如此,我仍然可以给出代码的结构和创建的对象的类型(见文章末尾):曲线、曲面、

我的大部分作品都使用LaTeX,并且总是使用eps文件——Matlab可以创建这些文件。没有任何问题,但是,对于一个新的案例,我开始学习Matlab生成了一个95MB的文件(而eps2pdf无法生成带有该文件的pdf)

这个问题可能很难回答。这似乎是一个意外的Matlab行为,但我不能分享原始代码不幸(加上代码非常长,依赖于这么多的变量和函数…)。我曾尝试使用内置函数构建一个最低限度的工作示例,但它当然不会重现问题。尽管如此,我仍然可以给出代码的结构和创建的对象的类型(见文章末尾):曲线、曲面、透明度,没有疯狂的东西

这段代码在许多不同的情况下运行都没有任何问题,并提供了几MB的文件。其中一个曲面中存在的点的数量、近似形状、曲线中的点的数量等。没有变化或变化很小。我无法解释文件大小的差异

我希望你能对我的行为做出解释,或者给我一个替代方案,让我把这张照片发给eps。或者两者都有。现在我把它输出到png,但是我非常喜欢矢量文件。以前有没有人遇到过每股收益非常大的问题

colordef white;
figure('Color','White','Name','STUFF')
hold all

% Show a curve
lpot = plot3(//STUFF\\, '-',...
    'Color', [0 0 1], 'LineWidth', 2);

% Show a curve
ph = plot3(//STUFF\\,'-',...
        'Color', [1 0 0], 'LineWidth', 2);

% Show a curve
plot3(//STUFF\\, '-',...
        'Color', [0 1 0], 'LineWidth', 2);

% Show a point
plot3(//STUFF\\, ...
    'k', 'MarkerSize', 10, 'Marker', '^', ...
    'MarkerFaceColor', [1 1 0]);

% Show a surface
surf(//STUFF\\);
colormap(jet); 
shading interp;

% Show a surface in transparency
surf_1 = trisurf(//STUFF\\);
set(surf_1,'FaceColor', [1 1 1], 'EdgeAlpha', 0, 'FaceAlpha', 0.5);

% Axis adjustements
axis equal tight
xlabel('stuff');
ylabel('stuff');
zlabel('stuff');
view(2);
grid on;
h_cbar = colorbar;
ylabel(h_cbar, //STUFF\\);
legend(//STUFF\\,...
    {//STUFF\\});
set(gcf,'units','normalized','outerposition',[0.10 0.10 0.80 0.80])

hold off

hgexport(gcf, ['mytoobigfigure.eps'],...
    hgexport('factorystyle'), 'Format', 'eps');
该代码在MatlabR2014B和Windows7上运行


谢谢大家

耶,多亏了彼得的评论,我解决了这个问题!修复方法:

myfig = gcf;                   % or define myfig when the figure is created
myfig.RendererMode = 'manual'  % use a set with older versions of Matlab
这并不意味着我理解为什么会发生这种情况,这很可能不是Matlab想要的行为。我认为出于某种原因,在保存图形时,渲染器会从OpenGL切换到画师。检查eps时,很明显,透明度是非常错误的(在大多数地方是关闭的),多边形偏移(或允许在其面片前绘制线的属性)也非常差。无论是否涉及位图,检索此类信息超出了我的能力。但显然,保存的图形与显示的图形不同。还应注意,将渲染器切换为手动不会以任何其他方式影响屏幕上的图片。我想知道默认情况下将渲染器设置为手动是否不是一个好主意。。。一直强制使用OpenGl会有什么缺点吗


如果有人对此主题有更详细的答案,我很乐意阅读。

如果您无法共享原始代码,也许您可以将正在绘制的变量存储在.mat文件中,并将其上载到dropbox,例如。这样,我们就可以检查实际图像是否也会在我们的系统上生成如此大的文件。您可以使用matlab2tikz软件包(但我从未对其进行过广泛测试,因此请注意此建议),它将matlab绘图转换为tikz文件(您可以使用tikz软件包在Latex中绘图)。Tikz的优点是,您可以沿轴单独重新缩放文本,这是我主要使用它的目的。eps可以非常高效(和高质量)地发布矢量图形。线条、阴影区域、文本等。但是,在某些情况下,图形无法由这些高效的EPS原语表示,EPS最终会包裹位图。查看图形的“renderer”属性,并尝试删除图形的某些特征以找到罪魁祸首。我怀疑是透明表面。@Peter:包装位图是一个质量问题,但与大量向量原语相比,性能问题要小一些。@WouterKuijsters我不知道这个包,非常感谢。我仍然希望得到一些修复,比如“关闭某个或某个参数”,但如果eps不能生产,我会研究它。沿轴重新缩放文本听起来很棒!恐怕我不能分享实际的变量,因为我的雇主不喜欢我在网上发布这些数据。我知道这对任何人来说都很困难,但我不能分享…@Peter谢谢你!!!你的直觉是对的,渲染器行为不端(在某种程度上我不知道),请参阅我在下面发布的答案。