How do I make surf accurately reflect my data?

1 次查看(过去 30 天)
Consider this example:
A=zeros(5);
A(3,3)=1;
surf(A)
view(2)
When viewing this, one would be tempted to think that there's a peak at (3.5,3.5) and not at (3,3). Is there a way to make surf (or another function) show the right color exactly where the peak is?
Of course I want to implement this for more complicated data sets, so a general solution would be very nice.

回答(1 个)

Orion
Orion 2014-11-18
you can play with shading
A=zeros(5);
A(3,3)=1;
surf(A);
pause(1)
view(2);
pause(1)
shading interp
  4 个评论
Mike Garrity
Mike Garrity 2014-11-19
Actually using FaceColor=texturemap works here.
A=zeros(5);
A(3,3)=1;
surf(A,'FaceColor','texturemap')
view(2)
What's happening in the FaceColor=flat case is that it's mapping the first 4x4 of the CData to the entire range of XData & YData. It has to do that because a 5x5 grid of XData & YData yields a 4x4 grid of quads.
But with FaceColor=texture, we're mapping the entire 5x5 contents of the CData to the 5x5 range of XData & YData. It can do that because texturemap doesn't have to assign one color per quad. It can split colors across quads so it can do any mapping. You could map a 7x5 CData onto a 3x4 XData & YData if you wanted to. So it gives you a lot of flexibility, but it will also let you make a mess if you're not careful.
Henrik
Henrik 2014-11-23
Thank you Mike, this seems to be exactly what I need. If you post this as an answer I'll accept it.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Graphics Objects 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by