How can I Draw a Line on a 3D plot?
187 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Joshua Mitchell
el 22 de Jun. de 2021
Comentada: Bretislav Kubes
el 5 de En. de 2023
I am trying to draw a red line across a 3D surface plot for an app:
I have the 2D plot coded to do this as follows:
surf(app.UIAxes2,Bat);
ylim(app.UIAxes2, [0 60]);
xlim(app.UIAxes2, [0 60]);
view(app.UIAxes2,2);
app.UIAxes2.PositionConstraint = 'outerposition';
xline(app.UIAxes2,value,'Color','red','LineStyle','-','LineWidth',1.5);
but the xline command will not work for the 3D plot, as it does not follow the Z data and draws a line straight through the dipole I am modelling.
"value" in the above code is whatever line is selected by the app user.
"Bat" is the matrix data I am modelling.
Does anyone know how to plot a red line like this that will contour to my Z data? Here is the code for my 3D plot below:
surf(app.UIAxes3,Bat);
ylim(app.UIAxes3, [0 60]);
xlim(app.UIAxes3, [0 60]);
view(app.UIAxes3,3);
app.UIAxes3.PositionConstraint = 'outerposition';
ztickformat(app.UIAxes3,'%g');
ax = app.UIAxes3;
ax.ZAxis.Exponent = 0;
Any help is appreciated, thank you.
2 comentarios
Scott MacKenzie
el 22 de Jun. de 2021
Have your tried line, instead of xline? It allows for x, y, and z input arguments.
Respuesta aceptada
Scott MacKenzie
el 24 de Jun. de 2021
Editada: Scott MacKenzie
el 24 de Jun. de 2021
Here's an example using line. I used your code, but re-assigned ax.UIAxes2, Bat, and value so the code would execute on my machine.
UIAxes3 = gca; % your app.UIAxes3
Bat = peaks; % for testing
value = 30; % test value
surf(UIAxes3, Bat);
ylim(UIAxes3, [0 60]);
xlim(UIAxes3, [0 60]);
view(UIAxes3, 3);
UIAxes3.PositionConstraint = 'outerposition';
ztickformat(UIAxes3,'%g');
UIAxes3.ZAxis.Exponent = 0;
x = 1:size(Bat,2);
y = ones(1,size(Bat,2)) * value;
z = Bat(value,:);
line(UIAxes3,x,y,z,'Color','red','LineStyle','--','LineWidth',2.5);
3 comentarios
Scott MacKenzie
el 25 de Jun. de 2021
Editada: Scott MacKenzie
el 25 de Jun. de 2021
You need to change z as well, to pull z data along the y-axis instead of the x-axis:
z = Bat(:,value);
Más respuestas (1)
KSSV
el 24 de Jun. de 2021
[X,Y,Z] = peaks(100) ;
% DRaw a line at origin
x = linspace(-3,3) ;
y = repelem(0,1,length(x)) ;
z = interp2(X,Y,Z,x,y) ;
% plot
surf(X,Y,Z)
hold on
plot3(x,y,z,'r','linewidth',3)
1 comentario
Ver también
Categorías
Más información sobre Annotations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!