我在matlab中把数据绘制成一个曲面。我有三个数据矩阵,x,y,z.,z的值可能不在0~1的范围之内。
我制作的情节如下:
surf(x,y,z);
[c,h] = contour3(x,y,z,'LevelList',[0 : 0.1 : 1],'Color','k');
clabel(c,h,[0 : 0.1 : 1]);我还对曲面做了一些修改,比如设置shading interp。

正如您可以看到的,结果图像剪辑的轮廓与下表面。如何确保轮廓和标签被绘制在表面之上?
发布于 2015-12-12 20:10:20
经过深入研究,我找到了最好的解决方案。
裁剪顺序在axes级别指定。
下面是一个完整的MWE,它的轮廓总是在表面的顶部:
fig = figure;
ax = get(gca);
ax.SortMethod = 'childorder'; % this is the important line
surf(x,y,z);
[c,h] = contour3(x,y,z,'LevelList',[0 : 0.1 : 1],'Color','k');
clabel(c,h,[0 : 0.1 : 1]);发布于 2015-12-08 08:49:08
您可以尝试处理contour修补程序的属性:增加修补程序边缘的linewidth:默认值为0.5: 1或1.5的linewidth就足够了。
按照同样的方式,您可以设置clabel生成的make的属性:您可以设置font size和font weight,以使它们更加可见。此外,还可以通过指定labelspacing属性来设置要添加的标签数量。
一个有趣的选项也可以是手动设置标签:这可以通过在manaul调用中指定clabel属性来完成。
在下面的示例中,您可以找到一个基于peaks曲面的示例:
[x,y,z]=peaks
surf(x,y,z);
shading interp
hold on
[c,h] = contour3(x,y,z,[-10:1:10]);
set(h(:),'linewidth',1,'edgecolor','k')
clabel(c,h,[-10:1:10],'fontsize',9,'fontweight','bold','rotation',0,'labelspacing',99);
% clabel(c,h,'manual','fontsize',9,'fontweight','bold','rotation',0);


希望这能有所帮助。
https://stackoverflow.com/questions/34147978
复制相似问题