How can I Draw a Line on a 3D plot?
조회 수: 159 (최근 30일)
이전 댓글 표시
I am trying to draw a red line across a 3D surface plot for an app:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/661250/image.png)
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
Scott MacKenzie
2021년 6월 22일
Have your tried line, instead of xline? It allows for x, y, and z input arguments.
채택된 답변
Scott MacKenzie
2021년 6월 24일
편집: Scott MacKenzie
2021년 6월 24일
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);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/663615/image.jpeg)
댓글 수: 3
Scott MacKenzie
2021년 6월 25일
편집: Scott MacKenzie
2021년 6월 25일
You need to change z as well, to pull z data along the y-axis instead of the x-axis:
z = Bat(:,value);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/665975/image.jpeg)
추가 답변 (1개)
KSSV
2021년 6월 24일
[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)
참고 항목
카테고리
Help Center 및 File Exchange에서 Annotations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!