Matlab - surf 和 contour3,剪裁顺序?
Matlab - surf and contour3, clipping order?
我在 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]);
我也对surface做了一些修改,比如设置shading interp
.
如您所见,结果图像剪裁了具有底层表面的轮廓。如何确保轮廓和标签绘制在曲面上方?
您可以尝试处理 contour
补丁的属性:增加补丁边缘的 linewidth
:默认值为 0.5:linewidth
为 1 或 1.5应该够了。
用同样的方法你可以设置clabel
生成的lavels的属性:你可以设置font size
和font weight
使它们更明显。您也可以通过指定 labelspacing
属性.
来设置要添加的标签数
一个有趣的选项也可以是手动设置标签:这可以通过在 clabel
调用中指定 manaul
属性 来完成。
下面是一个基于 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);
希望对您有所帮助。
在深入研究文档后,我找到了最佳解决方案。
裁剪顺序在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]);
我在 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]);
我也对surface做了一些修改,比如设置shading interp
.
如您所见,结果图像剪裁了具有底层表面的轮廓。如何确保轮廓和标签绘制在曲面上方?
您可以尝试处理 contour
补丁的属性:增加补丁边缘的 linewidth
:默认值为 0.5:linewidth
为 1 或 1.5应该够了。
用同样的方法你可以设置clabel
生成的lavels的属性:你可以设置font size
和font weight
使它们更明显。您也可以通过指定 labelspacing
属性.
一个有趣的选项也可以是手动设置标签:这可以通过在 clabel
调用中指定 manaul
属性 来完成。
下面是一个基于 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);
希望对您有所帮助。
在深入研究文档后,我找到了最佳解决方案。
裁剪顺序在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]);