首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab和contour3,剪辑顺序?

Matlab和contour3,剪辑顺序?
EN

Stack Overflow用户
提问于 2015-12-08 04:24:31
回答 2查看 1K关注 0票数 2

我在matlab中把数据绘制成一个曲面。我有三个数据矩阵,x,y,z.,z的值可能不在0~1的范围之内。

我制作的情节如下:

代码语言:javascript
复制
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

正如您可以看到的,结果图像剪辑的轮廓与下表面。如何确保轮廓和标签被绘制在表面之上?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 20:10:20

经过深入研究,我找到了最好的解决方案。

裁剪顺序在axes级别指定。

下面是一个完整的MWE,它的轮廓总是在表面的顶部:

代码语言:javascript
复制
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]);
票数 3
EN

Stack Overflow用户

发布于 2015-12-08 08:49:08

您可以尝试处理contour修补程序的属性:增加修补程序边缘的linewidth:默认值为0.5: 1或1.5的linewidth就足够了。

按照同样的方式,您可以设置clabel生成的make的属性:您可以设置font sizefont weight,以使它们更加可见。此外,还可以通过指定labelspacing属性来设置要添加的标签数量。

一个有趣的选项也可以是手动设置标签:这可以通过在manaul调用中指定clabel属性来完成。

在下面的示例中,您可以找到一个基于peaks曲面的示例:

代码语言:javascript
复制
[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);

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34147978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档