How to plot a surface in Matlab?

I would like to plot a surface in matlab; however, matlab is assigning each element of the matrix to an intersection of the meshgrid. I want each element of my matrix to be the value of each square in the meshgrid, not at the intersections. The result of this problem is that I am 'missing' a row/column on one end of my surface plot due to the color mapping. Using the data cursor I can confirm that the values are there, except on the intersections of the grid lines; hence the edges are effectively missing a row/column visually. I want a 3D equivalent of imagesc. Any ideas?

7 Comments

A square has 4 vertex.. So you cannot assign one value to a square.
So there is no way to center the values onto the squares? Is there a way to shift the meshgrid so that it seems like the intersections are in the middle of the squares?
How about assigning all four values same to each vertex?
That's a good idea, but I think there may be a discontinuity in some row or column at the end since there will inevitably be 2 corners=x and the other 2 corners=y.
Have you tried shading interp after plotting the surface?
Thank you so much! It worked! Is there anyway to put the surface lines on?
Nevermind figured it out. Thank you very much everyone!

Sign in to comment.

 Accepted Answer

José-Luis
José-Luis on 28 Sep 2016
You could use image() instead.

4 Comments

Image does work to fix this problem, but it still only generates a 2D plot, unless i'm missing something. Thanks for the suggestion though!
In that case I think you need to interpolate first and then use surf() and variants.
I think this would have also solved it so I am going accept this as an answer, including the line 'shading interp' solved it. I just need to find a way to put the lines back into the surface plot :)
The property 'edgecolor','k' did the trick ;)

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!