MatLab无缘无故地将图形保存到一个非常大的EPS文件中

sycxhyv7  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(280)

我的大部分作品都使用LaTeX,而且总是使用EPS文件--这是MatLab可以创建的文件。没有任何问题,但对于我开始研究的一个新案例,MatLab生成了一个95MB的文件(而eps2pdf无法生成具有该文件的pdf)
这个问题很可能很难回答。这似乎是一种意外的MatLab行为,但不幸的是,我不能分享原始代码(加上代码非常长,并且依赖于如此多的变量和函数…)。我尝试使用内置函数构建一个最小的工作示例,但当然不会重现该问题。尽管如此,我仍然可以给出代码的结构和创建的对象的类型(参见文章结尾):曲线、曲面、透明度,没有疯狂的东西。
这段代码已经在许多不同的情况下运行,没有任何问题,给了我几MB的文件。其中一个曲面上出现的点数、近似形状、曲线上的点数等没有变化或变化很小。我无法解释文件大小的差异。
我欢迎对这一行为的解释,或者将这张照片送到EPS的替代方案。当然,或者两者兼而有之。目前,我将其输出为PNG,但我非常喜欢矢量文件。以前有没有人遇到过超大EPS的问题?

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');

该代码在matlab r2014b、Windows 7上运行。
谢谢大家!

vngu2lb8

vngu2lb81#

耶,多亏了Peter Comment,我解决了问题!解决办法:

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会有什么缺点吗?
如果有人对这个主题有更详细的答案,我会很乐意阅读的。

lndjwyie

lndjwyie2#

进入文件->导出设置->渲染->自定义渲染,将画笔(矢量格式)更改为OpenGL(位图格式),然后点击“应用到图形”。现在,以任何格式保存该图形。即使是EPS文件也不会超过几MB。这对我很管用!

相关问题