4

我有 Matlab 代码,它生成一组子图,如下所示:

在此处输入图像描述

当我将它保存为 EMF 文件(通常是矢量格式)并插入 Powerpoint 或使用 Inkscape 查看时,然后仔细放大图像,它看起来像素化,并且清楚地由单个封装对象组成,而不是许多小的图形对象:

在此处输入图像描述

这对我来说非常令人惊讶,因为长期以来我一直将 Matlab 绘图导出为 EMF 并将它们集成到 Powerpoint 幻灯片中,以便在那里构建更复杂的图形,作为矢量图形,可以在任何尺寸下很好地打印。无论我在 Powerpoint 中放大多少,这些导入的 EMF 也可以很好地缩放并且看起来很平滑。

谁能猜出为什么在这种情况下,这个图没有保存为矢量图形,而是(看起来)渲染为光栅?生成此图的代码(基于 Matlab 命令subplotlinescatter)相当长/不优雅,但如果需要找到解决方案,我可以提供详细信息或简化。谢谢!

该站点上的其他类似线程无助于解决此问题。

4

1 回答 1

6

我相信我以前遇到过这个问题。如果它与我面临的问题相同,则与用于保存绘图的渲染器有关。虽然它应该painters在导出到矢量文件时自动选择渲染器,但我有过使用openGL渲染器的实例,这导致使用位图。我不完全确定为什么会发生这种情况 - 对于特别复杂的图形,它可能会恢复为 openGL 以避免令人讨厌的大或复杂的矢量文件。

如果您正在使用该print命令,您可以强制它使用 Painters 算法,如下所示:

print('-painters',...)

如果您使用“文件”>“另存为...”进行保存,我相信为该图形设置渲染器应该可以:

set(figure_handle,'renderer','painters');

为了解释,根据MA​​TLAB 文档

-opengl' - OpenGL 渲染器。保存位图图像时使用此渲染器。即使使用矢量格式,OpenGL 也会生成位图图像,这可能会限制您在其他应用程序中编辑图像的范围。

'-painters' - 画家渲染器。保存矢量图形文件时使用此渲染器。如果保存到矢量图形文件并且如果图窗 RendererMode 属性设置为“自动”,则 print 会自动尝试使用 Painters 渲染器。如果要确保输出格式是真正的矢量图形文件,请指定 Painters 渲染器。例如:

print('-painters','-deps','myVectorFile')

如果您不指定渲染器,则 print 会自动使用适当的渲染器来生成请求的输出格式。但是,如果您为图窗设置 Renderer 属性,则 print 在生成输出时会使用该渲染器。

编辑:另一个选项是使用复制图形命令(编辑 > 复制图形)——这应该将图形复制为 EMF 文件,并且应该遵循图形的渲染器设置。

于 2018-06-25T10:10:49.823 回答