我想像二维轮廓填充图(contour3(X,Y,Z)
)一样填充三维等高线图(contourf(X,Y,Z)
)。但我无法弄清楚如何实现这一目标。 contour3和surf的组合并不十分令人满意,因为有瓷砖。
[X,Y,Z] = peaks(32);
figure
contourf(X,Y,Z,15);
figure
contour3(X,Y,Z,15,'k');
hold on;
surf(X,Y,Z, 'Edgecolor', 'none');
contour3(X,Y,Z,15,'k'); hold on; surf(X,Y,Z, 'Edgecolor', 'none');
答案 0 :(得分:3)
基本曲面图上的颜色是Z
数据的函数。它们将被刻面或插值,但contour3
函数不会修改surf
对象的颜色。 contour3
函数仅绘制等值线。
如果您希望surface
以“块状”方式着色,如平面彩色图,则必须使色彩图也“块状”:
在您的示例中,您使用15
等值线,因此您必须创建一个15+1
颜色的颜色映射,以便颜色映射的每个颜色块与等值线匹配。
nContour = 15 ;
figure ; [X,Y,Z] = peaks(32);
surf(X,Y,Z, 'Edgecolor', 'none');
shading interp
colormap( parula(nContour+1) ) %// assign a colormap with only 15+1 colors
将为您提供下面屏幕截图左侧的图片。现在,如果您需要,请将您的等值线添加到顶部:
hold on;
[C,h] = contour3(X,Y,Z,nContour,'k');
你得到了右边的情节。您可以不按特定顺序执行这两项操作,只需确保曲面的颜色映射足以满足所需的等值线数。
答案 1 :(得分:0)
我遇到了同样的问题。您可能正在使用OpenGL进行渲染。 为了避免颜色在轮廓线之间跳过多个相邻值,您需要将渲染器修改为Painters:
set (gcf,'Renderer','painters')
希望有所帮助!