【问题标题】:Triangulation lines visible in filled mesh after printing in matlab在matlab中打印后在填充网格中可见三角线
【发布时间】:2019-09-28 08:26:08
【问题描述】:

我一直在使用violin 在 matlab 中生成(所谓的)小提琴图。情节看起来不错:

但是,将其打印(PDF 和 svg)会生成一个三角线可见的文件(放大以说明这一点):

我猜这是这些行的 zbuffer 设置的某种问题。在后台violin 只是以一种看起来完全合法的方式使用fill()

 h(i)=fill([F(:,i)+i;flipud(i-F(:,i))],[U(:,i);flipud(U(:,i))],fc,'FaceAlpha',alp,'EdgeColor',lc);

fill 替换为patch 并不能解决问题! 一个最小的、完整的和可验证的例子:

a=randn(10000,1);
[f, u, bb]=ksdensity(a,'bandwidth',0.2);
figure; fill([f'+i;flipud(i-f')],[u';flipud(u')],'b','FaceAlpha',1);
print(gcf,'-dpdf','a.pdf'); % bad
print(gcf,'-dsvg','a.svg'); % bad
figure; patch([f'+i;flipud(i-f')],[u';flipud(u')],'b','FaceAlpha',1);
print(gcf,'-dpdf','b.pdf'); % bad
print(gcf,'-dsvg','b.svg'); % bad

结果:

我的版本是 R2017a。

【问题讨论】:

  • 如果将边缘颜色设置为与填充颜色相同会怎样?
  • 或者将“EdgeColor”设置为“none”。另外,尝试不同的渲染器。最后,您使用什么过程打印到pdf?您可以先打印到 png 然后转换为 matlab 外部的 pdf 吗?看来您有一些不是 1 的 FaceAlpha。尝试将其强制为 1。您可能需要从violin 或axes.children 获取句柄图形。
  • @Wolfie:将边缘颜色设置为与填充颜色相同没有帮助,三角线不是边缘颜色(见最右边的小提琴)
  • @Wick alpha 为 1,我使用 prnd -dpdf 保存为矢量图形 pdf。我认为没有其他选择(另存为图像不是一种选择,我需要矢量格式)。
  • svg 是另一种矢量替代方案(epsc2 也是如此,但应该与 PDF 相同)。从链接的图像中很难说,但看起来面部的边缘并没有对齐,而且你实际上是通过背景颜色而不是刻面的边缘颜色。图形左右对称吗?可以在原稿上打印垂直镜像的图像吗?

标签: matlab printing rendering matlab-figure triangulation


【解决方案1】:

这是一个使用补丁创建一个表示图形外部的多边形的示例。

theta = linspace(0,2*pi,100);
r = sqrt(1.125+cos(theta*2));
y = r.*cos(theta);
x = r.*sin(theta);
subplot(121)
plot(x,y);

subplot(122)
h = patch(x,y,'r','edgecolor','none');

【讨论】:

  • 看来patch的结果是一样的!无论如何,谢谢你的努力:)
  • 很抱歉听到这个消息。在外部程序中使用 SVG -> PDF 没有帮助?
  • 打印到SVG时也会出现这个问题(使用print -dsvg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2019-02-18
  • 2019-01-23
相关资源
最近更新 更多