Estoy tratando de hacer una figura de una gráfica de superficie, y debajo de la superficie deseo mostrar las líneas de contorno, pero quiero que el contorno esté en z = -1
en lugar de en el valor predeterminado 0
. Encontré un post anterior sobre este problema. aquí, pero cuando intento la solución el contorno sigue en z = 0
. Tal vez tenga algo que ver con la versión de MATLAB que estoy usando, ¿cuál es 2014b? ¿Alguna idea sobre cómo hacer que funcione?
El código que probé:
%# plot surface and contour
Z = peaks;
surf(Z), hold on
[~,h] = contourf(Z); %# get handle to contourgroup object
%# change the ZData property of the inner patches
hh = get(h,"Children"); %# get handles to patch objects
for i=1:numel(hh)
zdata = ones(size( get(hh(i),"XData") ));
set(hh(i), "ZData",-10*zdata)
end
Respuestas
0 para la respuesta № 1Entonces, realmente no pude descifrarlo como se propuso en el ejemplo que encontré y publiqué, pero encontré una manera que funciona. Lo que terminé haciendo fue básicamente esto:
figure
hold on
surf(X,Y,Z+1);
contour(X,Y,Z);
zz = get(gca,"ZTick");
set(gca,"ZTickLabel",sprintf("%3.1fn",zz-1));
Esto me da el surf y el contorno en la misma figura, pero produce algunos problemas con las asignaciones de color.
0 para la respuesta № 2
Descubrí cómo resolver el problema con las asignaciones de color que enfrentó Kine. Nota: He hecho el siguiente código en MATLAB R2015b:
offset = 0.5;
plotHandle = surfc(X1, Y1, Z1);
hold on;
% This line moves the surface up from its original location and increases the space between the surface and the contour plot
plotHandle(1).ZData = plotHandle.ZData + offset;
% However in doing so the color mappings are changed. So, the line below restores these mappings
plotHandle(1).CData = plotHandle.CData - offset;
% This line changes fills the contour plot
plotHandle(2).Fill = "on";
grid on;
% The following lines draw critical areas on the contour line, as it was more readable in my case
axisHandle = gca;
ZHeight = axisHandle.ZLim(1);
plot3(X2, Y2, ZHeight, "o", "MarkerSize", 10, "LineWidth", 1, "Color", "k", "MarkerFaceColor", "m");
plot3(Y2, X2, ZHeight, "o", "MarkerSize", 10, "LineWidth", 1, "Color", "k", "MarkerFaceColor", "m");
hold off
0 para la respuesta № 3
Tengo el mismo problema. Y finalmente, conseguí el contourf en el plano Z = -10. Mi versión de MATLAB es
Versión de MATLAB: 8.5.0.197613 (R2015a)
Espero que los códigos te funcionen.
clear all
clc
[X,Y,Z] = peaks;
[~,hContour] = contourf(X,Y,Z,20,"edgecolor","none");
hContour.ContourZLevel = -10; % set the contour"s Z position
view(44,30)
colormap(jet)