我一直在使用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。
答案 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');