フィルターのクリア

I want to plot a surface plot of 2d data (rectangle)

5 ビュー (過去 30 日間)
Muhammad Faheem Awan
Muhammad Faheem Awan 2018 年 8 月 31 日
Hi, I have x and y vectors, and corresponding values in vector z. I am also giving the vectors. consider x =[1:1:35]', y =[1:1:35]', z=[-55.4 -59.1 -57.4 -56.2 -59.1 -53.5 -56.1 -54.6 -55.2 -57.1 -53.0 -55.4502612542349 -55.4077517669503 -56.4923353520300 -55.9251080559888 -55.0880626240375 -56.5513629493757 -59.9456926093940 -60.0680208257504 -56.9962224622326 -58.2962763219373 -57.8927048783149 -60.3357449788936 -62.3074344511875 -60.7735542755245 -59.6553390538291 -58.8784323561426 -60.0117227083943 -61.5516366520366 -62.6449934321167 -60.6378148012631 -60.2066312113008 -60.5654267675394 -61.6400960109808 -63.0116960206390]. By scatter(x,y,10,z) I can plot the figure attached. Now I want to plot the surface of that data. If any one can help.
  2 件のコメント
Rik
Rik 2018 年 8 月 31 日
You can check out the surf function
Muhammad Faheem Awan
Muhammad Faheem Awan 2018 年 8 月 31 日
I tried with surf, it then says z should be a matrix..

サインインしてコメントする。

採用された回答

John D'Errico
John D'Errico 2018 年 8 月 31 日
編集済み: John D'Errico 2018 年 8 月 31 日
NO. You don't have a surface. You have a single set of points, apparently z(x,y). But here, ALL of your points lie along the line x==y. You have 35 values for x, 35 values for y, and 35 values for z. And at every one of those points, x==y.
So you have insufficient information to create a surface. Because all of your points lie in a straight line.
plot(y,z','-')
xlabel 'X,Y'
ylabel 'Z'
Sorry, but that does not yield a surface. There is NO additional information provided by x, beyond that which you provide in y (or vice versa.)
Now, the .png that you show is a completely different thing. It suggests that what you really want to do is reshape the VECTOR of z values into a 5x7 array.
So, really x and y are NOT the vectors 1:35. They might be vectors 1:5 or 1:7, or it seems they have other units.
You MIGHT start with
Zsurf = reshape(z,5,7);
Or, perhaps you want it as
Zsurf = reshape(z,7,5);
I cannot know which it is. I might guess the former. So I might do this:
Zsurf = reshape(z,5,7);
surf(Zsurf)
Better would be to then set the axes to the proper units. You can do that in the call to surf too.
Finally, it looks like that grid shown is not in fact a nice, regular meshed grid. But you've not told us what the true x and y values are that comprise the grid.
  4 件のコメント
John D'Errico
John D'Errico 2018 年 9 月 3 日
However, your data does NOT lie on a regular grid. We can plot it as a surface:
x = reshape(x,5,7);
y = reshape(y,5,7);
z = reshape(z,5,7);
surf(x,y,z)
view(0,90)
But as you can see, the points do not lie on some nice regular grid. So, while we can try to use a simple linear interpolation, as interp2 would provide, it will fail.
interp2(x,y,z,-50,-190)
Error using interp2>makegriddedinterp (line 237)
Input grid is not a valid MESHGRID.
Error in interp2 (line 136)
F = makegriddedinterp(X, Y, V, method,extrap);
That means you have a scattered data interpolation problem. Simplest is then:
si = scatteredInterpolant(x(:),y(:),z(:))
si =
scatteredInterpolant with properties:
Points: [35×2 double]
Values: [35×1 double]
Method: 'linear'
ExtrapolationMethod: 'linear'
si(-50,-190)
ans =
-58.456
Muhammad Faheem Awan
Muhammad Faheem Awan 2018 年 9 月 3 日
@john, Thank You very much for your time. Highly appreciated. If I consider some random values for x and y, or normalize x and y by dividing on the highest number and consider it between 0 and 1. Then Can I use interp2?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by