Matlab填充contour3图,如contourf plot

时间:2015-08-10 11:32:19

标签: matlab plot

我想像二维轮廓填充图(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');

contourf(X,Y,Z,15); enter image description here

contour3(X,Y,Z,15,'k'); hold on; surf(X,Y,Z, 'Edgecolor', 'none'); enter image description here

2 个答案:

答案 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');

你得到了右边的情节。您可以不按特定顺序执行这两项操作,只需确保曲面的颜色映射足以满足所需的等值线数。

contour3ex

答案 1 :(得分:0)

我遇到了同样的问题。您可能正在使用OpenGL进行渲染。 为了避免颜色在轮廓线之间跳过多个相邻值,您需要将渲染器修改为Painters:

set (gcf,'Renderer','painters')

希望有所帮助!