3D plot on given X,Y coordinates

조회 수: 9 (최근 30일)
Berkay Dürüsel
Berkay Dürüsel 2018년 5월 1일
답변: Shivam Anand 2022년 5월 11일
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
John BG
John BG 2018년 5월 1일
what about showing the readers the MATLAB code that you tried with surf?
Berkay Dürüsel
Berkay Dürüsel 2018년 5월 2일
added. Error is: Error using surf (line 71) Z must be a matrix, not a scalar or vector.

댓글을 달려면 로그인하십시오.

답변 (2개)

jonas
jonas 2018년 5월 2일
편집: jonas 2018년 5월 2일
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 2022년 5월 11일
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)

카테고리

Help CenterFile Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by