3D plot on given X,Y coordinates

16 views (last 30 days)
Berkay Dürüsel
Berkay Dürüsel on 1 May 2018
Answered: Shivam Anand on 11 May 2022
I got X and Y coordinates of a 2D surface. On this coordinates, I need to put data in it and the data is a vector. I want to see the data I gave for every element of the vector, so it should be 3D plotting. Mesh plotting does not help, since z should not be a vector. Note : The data is not corrolated with X and Y.
% code
x = 30;
>> y = 40;
>> [xx,yy] = meshgrid(x,y);
>> zz = InterpolatedTheta %The data I'm using; 1x832 double.
mesh(xx,yy,zz);
surf(xx,yy,zz);
zz =
end
  4 Comments
John BG
John BG on 1 May 2018
what about showing the readers the MATLAB code that you tried with surf?
Berkay Dürüsel
Berkay Dürüsel on 2 May 2018
added. Error is: Error using surf (line 71) Z must be a matrix, not a scalar or vector.

Sign in to comment.

Answers (2)

jonas
jonas on 2 May 2018
Edited: jonas on 2 May 2018
There are a number of issues with your code, such as wrong type of input for meshgrid and surf.
Assuming that you have three vectors XYZ of equal size (1x832) and you want to plot the scattered data as a surf, the surf function does not support this type of input as Z must be defined on a grid. One way is to solve this is to interpolate your data on a rectangular grid using interp2 and meshgrid. A simpler way is to use something like the non-default function surf_from_scatter (link), which supports XYZ vectors. Or you can just use these two lines of code, which I took directly from the referenced function:
tri = delaunay(x,y);
h = trisurf(tri, x, y, z);
This is of course assuming that you have scattered data, which should have been clear from your question.

Shivam Anand
Shivam Anand on 11 May 2022
x=[32 20 67 1 98 34 57 65 24 82 47 55 8 51 13 14 18 30 37 39 10 33 21 26 38 81 83 60 95 22 17 5 72 46 99 52 12 25 96 29 70 85 43 69 19 78 97 31 89 53 2 91 48 71 61 15 36 84 94 50 11 80 6 7 49 74 9 88 40 79 27 68 73 64 63 59 86 23 35 58 45 28 100 42 93 87 16 90 41 66 54 92 77 4 62 76 75 56 3 44];
y=[96 75 24 9 83 49 27 77 3 23 17 31 40 13 7 52 51 21 98 47 64 79 78 91 44 16 15 100 84 99 63 68 70 30 54 76 97 73 33 5 88 8 71 66 62 25 60 42 72 45 18 11 28 59 89 65 10 55 69 81 12 26 20 95 87 41 74 50 93 22 43 90 14 34 82 35 56 38 80 32 1 57 6 36 37 61 29 58 2 48 4 46 67 53 92 86 94 19 39 85];
z=[55 31 11 45 83 36 86 49 15 57 42 46 8 94 88 47 54 81 98 41 32 35 56 85 9 89 37 60 23 62 67 100 78 76 73 80 10 20 68 34 77 93 1 63 53 12 22 99 91 40 84 24 33 3 43 19 92 97 6 82 64 25 26 79 95 4 44 58 5 21 70 29 65 87 96 90 51 14 18 2 72 28 71 39 52 7 27 59 50 61 48 30 66 69 17 13 74 16 75 38];
xlin = linspace(min(x), max(x), 100);
ylin = linspace(min(y), max(y), 100);
[X,Y] = meshgrid(xlin, ylin);
% Z = griddata(x,y,z,X,Y,'natural');
% Z = griddata(x,y,z,X,Y,'cubic');
Z = griddata(x,y,z,X,Y,'v4');
mesh(X,Y,Z)
axis tight; hold on
plot3(x,y,z,'.','MarkerSize',15)

Community Treasure Hunt

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

Start Hunting!