2015-08-10 3 views
0

Я хотел бы заполнить трехмерный контурный график (contour3(X,Y,Z)), подобный графику заполнения 2D контура (contourf(X,Y,Z)). Но я не могу понять, как это можно достичь. Сочетание контура 3 и прибоя не очень удовлетворительно, так как есть плитки.Matlab fill contour3 plot like contourf plot

[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

+0

'shading interp' должен сделать это красивее уже. – Hoki

+0

Это удаляет плитки, но теперь проблема заключается в цветовом градиенте. – konze

+0

Что вы подразумеваете под «цветовым градиентом»? – Hoki

ответ

2

цвет на основной поверхности участка является функцией данных 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

0

У меня была такая же проблема. Вероятно, вы работаете с OpenGL. Для того, чтобы избежать цветов прыжков более одной смежного значения между контурными линиями, вам нужно изменить рендерер художников:

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

Надежда, что помогает!