在Matlab中打印后,在填充网格中可见的三角剖分线

时间:2019-05-10 12:05:54

标签: matlab printing rendering matlab-figure triangulation

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

但是,将其打印(到pdf和svg)都将在一个文件中显示三角剖分线(放大以指出这一点): screenshot from pdf

我想这是这些行或其他内容的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

结果: result of the minimal example

我的版本是R2017a。

1 个答案:

答案 0 :(得分:0)

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

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');