Effacer les filtres
Effacer les filtres

How can I Draw a Line on a 3D plot?

143 vues (au cours des 30 derniers jours)
Joshua Mitchell
Joshua Mitchell le 22 Juin 2021
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 commentaires
Scott MacKenzie
Scott MacKenzie le 22 Juin 2021
Have your tried line, instead of xline? It allows for x, y, and z input arguments.
Joshua Mitchell
Joshua Mitchell le 23 Juin 2021
I am trying to use line and it seems like it is possible, but I'm having a hard time figuring out how it should work with my data specifically.
I've tried:
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;
line(app.UIAxes3,Bat(value,:),Bat(:,value),Bat(:,10),'Color','red','LineStyle','--','LineWidth',1.5);
And it is giving me strange lines like:
It is probably just how I am setting the x,y,z value but I can't seem to come up with a decent line.

Connectez-vous pour commenter.

Réponse acceptée

Scott MacKenzie
Scott MacKenzie le 24 Juin 2021
Modifié(e) : Scott MacKenzie le 24 Juin 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 commentaires
Scott MacKenzie
Scott MacKenzie le 25 Juin 2021
Modifié(e) : Scott MacKenzie le 25 Juin 2021
You need to change z as well, to pull z data along the y-axis instead of the x-axis:
z = Bat(:,value);
Joshua Mitchell
Joshua Mitchell le 25 Juin 2021
Of course! Thank you so much, I really appreciate it.

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 24 Juin 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 commentaire
Bretislav Kubes
Bretislav Kubes le 5 Jan 2023
Wonderful easy solution, thanks!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Two y-axis dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by