MATLAB:导出后作为矢量图形可见的补丁边缘

时间:2015-04-23 13:20:32

标签: matlab vector-graphics matlab-hg2

Matlab中的补丁从单个三角形粘合在一起。它们的边缘通常是不可见的,但是当我以矢量图形格式导出图形时,可以清楚地看到它们(不是显示整个图像,只是放大的部分)

edges of individual triangles

生成此MWE的代码是:

xx = [0:1:100, 100:-1:0];
yy = [zeros(1,101), ones(1,101)];
p1 = patch(xx,yy,'b'); 
print('testPatch','-dpdf','-painters')

替代函数fill表现相同。有没有办法避免这个错误,或者在这种情况下我是否必须使用位图?

编辑:一个解决方法是孵化该区域而不是填充它。这显然并非总是可行,但在我的情况下,它工作得很好,我可以坚持使用矢量图形。相关的FEX提交是http://www.mathworks.com/matlabcentral/fileexchange/30733-hatchfill

3 个答案:

答案 0 :(得分:0)

plot2svg允许创建具有完整补丁的矢量图形文件(SVG)。我也一直关注export_fig更新,看来Yair Altman是working on this issue。我不会为The Mathworks的解决方案屏住呼吸。

答案 1 :(得分:0)

分散的矢量图形输出(切片,三角形,矩形而不是关节对象)是R2014b图形引擎更新后的秘密功能之一。

我能够将这些三角形与以下使用Inkscape系统调用的python脚本连接在一起 https://github.com/Sbte/fix_matlab_eps。 但这是解决方法,适用于简单的情节。这不是解决方案。

使用光栅输出,或保存数据并使用python matplot软件。

答案 2 :(得分:0)

这是一个烦人的问题。我从 Matlab 看到的唯一答案是它与 PDF 查看器中的抗锯齿有关。它在这里被广泛讨论: https://www.mathworks.com/matlabcentral/answers/162257-problem-with-patch-graphics-in-2014b-splits-in-two-along-diagonal

Mathworks 建议我们更改 PDF 查看器选项,如下所述: https://www.stata.com/support/faqs/graphics/line-artifacts-in-filled-contour-plot/ 如果链接断开,以下是关键信息: 以下是在一些流行的 PostScript 和 PDF 查看器上关闭抗锯齿的说明:

  • GSView:从“媒体”>“显示设置”菜单中,将“图形 Alpha”更改为 1 位。
  • Adobe Reader 9 和 10:从 Adob​​e Reader > 首选项...菜单中,选择“页面显示”窗格,取消选中“使用 2D 图形加速”,然后取消选中“平滑线条艺术”。
  • Adobe Illustrator:从 Illustrator > 首选项... > 常规菜单,取消选择“抗锯齿图稿”。
  • Mac 预览:从“预览”>“首选项...”菜单中,选择“PDF”窗格并取消选中“平滑文本和艺术线条”。
  • FoxIt Reader:文件>首选项>页面显示,取消选中“平滑线条艺术”

这在大多数情况下都适用于我,但是,正如 Mathworks 讨论中的一位人士所说,我们不能指望我们的同事更改他们的 PDF 查看器设置来查看我们的绘图。

这似乎是一个可行的解决方法(使用带有 Adob​​e Illustrator 或 Inkscape+python 的脚本来加入补丁): https://github.com/dfarrel1/fix_matlab_vector_graphics