How can I Draw a Line on a 3D plot?
163 ビュー (過去 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!