我正在尝试从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
答案 0 :(得分:1)
这是一个非常令人沮丧的问题,似乎没有解决方案(甚至很少尝试解决方案),现在已经很多年了。总之,Matlab无法处理输出无伪影轮廓或曲面图(任何具有复杂网格或透明度的图形)。
我可以建议一个简单的解决方法,在大多数情况下都可以使用,其中底层轮廓图的颜色或细节不需要完美保留。
以png格式输出图形版本,且分辨率足够高。
以pdf格式输出没有颜色的图形版本。这应该没有任何文物。如果您的数字很复杂并且有很多透明度,您可能需要输出多个版本来构建“级别”。
使用Adobe Illustrator(或某些等效工具)执行光栅图像的矢量化跟踪。您可能会在这里丢失一些细节,但对于细节有限的简单等高线图,它将很容易转换为矢量化形式。
在Illustrator中叠加两个图像。以矢量格式输出。
这也允许您使用Illustrator压缩pdf的功能。
如果您不想玩矢量化光栅输出,您也可以简单地替换步骤3-4并将光栅颜色图像与矢量化线图像组合。这适用于复杂的等高线图,为您提供清晰的线条,但能够压缩底层颜色。
答案 1 :(得分:1)
最终,MatLab 2013b没有这个问题。此外,它生成的文件的体积要小得多。这是因为MatLab 2013b构成了大重叠图形的矢量化图像,而MatLab 2014b则进行了可怕的网格划分。
这里第一个文件是用2013b获得的,第二个是用MatLab 2014b获得的(我突出显示了一个带有红色笔划的多边形来显示差异)。体积大约相差22倍(38 Kb vs. 844 Kb)。
所以这不是观众的问题,而是图像从MatLab导出的方式。
这里也讨论了这个问题Triangular split patches with painters renderer in MATLAB 2014b and above,但仍然没有直接的解决方案。