Lines on 3D surface plot
10 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello, I have the following example (see below) of a data that I am using to plot a 3D surface. What I would like to do is to show on my surface the intersection lines of horizontal planes parallel to xy plane with my surface. These parallel planes could be for example at z= 210, z=220, z=230, z=240 etc (intervals could be regular or not). Could you please let me know whether I can do this and how? The data and what I have done so far is here:
X =[
0 0 0 0 0 0 0 0 0 0
0.0357 0.0357 0.0358 0.0358 0.0359 0.0359 0.0359 0.0360 0.0360 0.0360
0.0714 0.0715 0.0716 0.0716 0.0717 0.0718 0.0719 0.0719 0.0720 0.0721
0.1071 0.1072 0.1074 0.1075 0.1076 0.1077 0.1078 0.1079 0.1080 0.1081
0.1429 0.1430 0.1431 0.1433 0.1434 0.1436 0.1437 0.1439 0.1440 0.1441];
Y=[
3.5714 3.5750 3.5786 3.5821 3.5857 3.5893 3.5929 3.5964 3.6000 3.6036
3.5357 3.5392 3.5428 3.5463 3.5499 3.5534 3.5569 3.5605 3.5640 3.5675
3.5000 3.5035 3.5070 3.5105 3.5140 3.5175 3.5210 3.5245 3.5280 3.5315
3.4643 3.4677 3.4712 3.4747 3.4781 3.4816 3.4851 3.4885 3.4920 3.4955
3.4286 3.4320 3.4354 3.4389 3.4423 3.4457 3.4491 3.4526 3.4560 3.4594];
Z =[
276.7398 270.9391 265.1383 259.3376 253.5368 247.7361 241.9354 236.1346 230.3339 224.5331
272.3587 266.5536 260.7484 254.9433 249.1382 243.3331 237.5279 231.7228 225.9177 220.2644
267.9776 262.1680 256.3585 250.5490 244.7395 238.9300 233.1205 227.3110 221.5015 216.3515
263.5964 257.7825 251.9686 246.1548 240.3409 234.5270 228.7131 222.8992 217.0853 212.4386
259.2153 253.3970 247.5788 241.7605 235.9422 230.1240 224.3057 218.4874 212.6691 208.5257];
figure
surf(X,Y,Z)
s=surf(X,Y,Z,'EdgeColor','none')
xlabel('Wi');
ylabel('So');
zlabel('SD');
%%Extract X,Y and Z data from surface plot
x=s.XData;
y=s.YData;
z=s.ZData;
Thanks. K.
0 Commenti
Risposta accettata
Star Strider
il 12 Lug 2017
I am not certain exactly what you want.
This should at least get you started:
figure
surf(X,Y,Z)
s=surf(X,Y,Z,'EdgeColor','none')
hold on
for k1 = 210:10:270
surf(X, Y, k1*ones(size(Z)), 'FaceAlpha',0.5, 'EdgeColor',[1 1 1 ]*0.8)
end
hold off
It simply loops, creating a horizontal plane of ones at each value of ‘k1’.
If you want a larger plane, you will have to define new ‘X’ and ‘Y’ matrices for it. The ‘Z’ matrix defining the plane would then be a ones matrix the same size as those matrices.
3 Commenti
Star Strider
il 17 Lug 2017
The contour3 function will do what I believe you want:
figure
surf(X,Y,Z,'EdgeColor','none')
hold on
contour3(X, Y, Z, [ 210:10:270], 'LineWidth',1, 'Color','k')
hold off
Experiment with 'LineWidth' and 'Color' to get the result you want.
Akhil Kallepalli
il 19 Ott 2017
If you had an image file where X, Y are the coordinates of the pixel and Z is the value of the pixel, how would this implementation change?
Più risposte (1)
John BG
il 7 Ago 2017
Hi Katerina
I have answered your surface 'sectioning' with vertical planes answering your other question.
if you find this answer useful would you please be so kind to consider marking my answer as Accepted Answer?
To any other reader, if you find this answer useful please consider clicking on the thumbs-up vote link
thanks in advance
John BG
1 Commento
Jan
il 20 Ott 2017
This message contains only a link to a completely unrelated thread of another user, 4 times the name of the author and begging for points.
Vedere anche
Categorie
Scopri di più su Surface and Mesh Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!