【发布时间】: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