首页 > 解决方案 > 在matlab中打印后在填充网格中可见三角线

问题描述

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

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

我想这是这些行的 zbuffer 设置的某种问题。在引擎盖下violin只是fill()以一种看起来完全合法的方式使用:

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

更换fillpatch不能解决问题!一个最小的、完整的和可验证的例子:

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。

标签: matlabprintingrenderingmatlab-figuretriangulation

解决方案


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

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

推荐阅读