Surf coloring question: How CData works?

I am trying to color different surf pictures. Surf by default colors the surface using the colorbar from minimum of z data up to maximum of z data, using the whole colorbar. I want this to override; color the z data according to the z scale. I have a demo program how I tried to do this:
figure(1);
x=1:50;
y=1:50;
z=rand(50,50);
hs=surf(x,y,z,...
'FaceColor','interp',...
'EdgeColor','none',...
'FaceLighting','gouraud');
abc=max(abs(zlim));
zlim([-abc,abc]);
colorbar;
mmin=min(min(z));
mmax=max(max(z));
hs.CData=(z-mmin)*(2*abc)/(mmax-mmin)-abc ;
view([1 0 0]);
If I run this program, I have a toolbar, saying that deep blue corresponds to -1, bright yellow corresponds to +1 (that is ok, that is what I wanted). The picture, however, is blue around the minimum value (around zero) and yellow at around +1. I would like to have "green" at zero, as it is on the colorbar.
What I am doing wrong???

 採用された回答

Rik
Rik 2019 年 2 月 17 日
編集済み: Rik 2019 年 2 月 17 日

0 投票

This is where the caxis function is for. You can change the color axis to match your data to a desired part of your color bar.
figure(1);
x=1:50;
y=1:50;
z=rand(50,50);
hs=surf(x,y,z,...
'FaceColor','interp',...
'EdgeColor','none',...
'FaceLighting','gouraud');
abc=max(abs(zlim));
zlim([-abc,abc]);
colorbar;
view([1 0 0]);
caxis([-1 1])

1 件のコメント

Csaba
Csaba 2019 年 2 月 17 日
Thanks, however,
caxis([-abc,abc]);
is the correct in my case.
So many commands!
I still do not understand why my method does not work?????

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

その他の回答 (0 件)

カテゴリ

製品

質問済み:

2019 年 2 月 17 日

コメント済み:

2019 年 2 月 17 日

Community Treasure Hunt

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

Start Hunting!

Translated by