我正在尝试从Matlab导出填充的轮廓图作为矢量图形以包含在Latex文件中。我当前的方法是:

contourf(x,y,v_mag,20), axis([0,width,0,height]),daspect('manual') ;
grid off
colormap jet
h = colorbar;
caxis([0 v_lid])
h.Label.String = 'Velocity Magnitude (m/s)';
set(gcf,'renderer','painters')
export_fig('-painters', '-transparent', 'pdf', 'filename.pdf');

这种方法的问题在于,它会产生如下所示的伪像(白线):

我知道这些白线是定义阴影区域的多边形,这些阴影区域具有不可见的边缘,并且与(according to here)并不完全重叠。该问题是由pdf查看器本身引起的,该查看器本身试图使屏幕(according to here)上显示的线条平滑。我的问题是,大多数查看文档的人不会知道这一点,也不会知道如何防止查看者这样做。所以我的问题是:

是否可以在没有这些伪像的情况下从Matlab创建填充轮廓图的矢量图形?

Eps产生相同的问题。我曾尝试使用SVG function,但没有任何运气。由于缩放引起的像素化,我试图避免使用栅格图形。任何建议都将不胜感激。

编辑-其他信息-使用Matlab v.2014b和Ghostscript v.9.15

最佳答案

这是一个非常令人沮丧的问题,似乎没有解决方案(甚至很少有解决方案的尝试),并且已经有很多年了。总而言之,Matlab无法处理输出无伪影的轮廓图或曲面图(任何具有复杂网格或透明度的图)。

我可以建议一个简单的解决方法,该方法可以在大多数情况下使用,其中不需要完美保留基础轮廓图的颜色或细节。

  • 以足够高的分辨率输出图的一个版本(不带png格式的线条)。
  • 以pdf格式输出无颜色的图形版本。这应该没有任何人工制品。如果您的图复杂且具有许多透明性,则可能需要输出构建“级别”的多个版本。
  • 使用Adobe Illustrator(或等效的工具)对光栅图像执行矢量化跟踪。您在这里可能会丢失一些细节,但是对于细节有限的简单等高线图,它将很容易转换为矢量化形式。
  • 在Illustrator中叠加两个图像。以矢量格式输出。

  • 这也使您可以使用Illustrator压缩pdf之类的功能。

    如果不想通过矢量化光栅输出来玩弄,也可以简单地替换步骤3-4,并将光栅彩色图像与矢量化的线形图像合并。对于复杂的轮廓图,它可以很好地为您提供清晰的线条,但可以压缩基础颜色。

    关于Matlab:如何避免在填充轮廓图中出现伪影,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28325901/

    10-10 11:48