I want to plot a surface plot of 2d data (rectangle)
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Muhammad Faheem Awan
am 31 Aug. 2018
Kommentiert: Muhammad Faheem Awan
am 3 Sep. 2018
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 Kommentare
Akzeptierte Antwort
John D'Errico
am 31 Aug. 2018
Bearbeitet: John D'Errico
am 31 Aug. 2018
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 Kommentare
John D'Errico
am 3 Sep. 2018
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
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Surface and Mesh Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!