9

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

单个三角形的边

生成此 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

4

3 回答 3

0

plot2svg允许创建带有完整补丁的矢量图形文件 (SVG)。我也会继续关注export_fig的更新,似乎 Yair Altman正在解决这个问题。不会屏住呼吸寻求 The Mathworks 的解决方案。

于 2015-06-16T12:53:30.880 回答
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 > Preferences... > General 菜单中,取消选择“Anti-Aliased Artwork”。
  • Mac 预览:从“预览”>“首选项...”菜单中,选择“PDF”窗格并取消选中“平滑文本和线条艺术”。
  • FoxIt Reader:文件>首选项>页面显示,取消选中“平滑线条艺术”

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

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

于 2020-12-22T15:14:58.063 回答
0

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

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

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

于 2016-04-15T11:20:26.377 回答