Assign custom interval to the color map z axis of a surf plot

14 ビュー (過去 30 日間)
OLUWAFEMI AKINMOLAYAN
OLUWAFEMI AKINMOLAYAN 2022 年 7 月 15 日
コメント済み: Mathieu NOE 2022 年 9 月 12 日
My surf (z) plot ranges from 0 to 255. i used turbo color map but the ranges per color were quite even across the value. i would like to able to set uneven custom interval for the colormap of my surf plot. I have checked through resources online, but could not figure it out for my case. Thanks in advance.
  5 件のコメント
OLUWAFEMI AKINMOLAYAN
OLUWAFEMI AKINMOLAYAN 2022 年 7 月 15 日
編集済み: OLUWAFEMI AKINMOLAYAN 2022 年 7 月 15 日
The data is quite larger than 5mb. i could not upload it. I just need an example. I can adapt it to my case
OLUWAFEMI AKINMOLAYAN
OLUWAFEMI AKINMOLAYAN 2022 年 7 月 15 日
surf(peaks)
colormap turbo(7)
colorbar
The above is an example. However, I want to be able to use a custom interval. Instead of default range of even division of interval for the colors, I want a custom one.

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

採用された回答

Mathieu NOE
Mathieu NOE 2022 年 7 月 15 日
hello
try my little demo
the colorbar is "frozen" so that ticks / tickslabels do not vary acccording to data range. In other words , you can display data which max value can be either below or above the max value of the thresholds without graphical impact.
see the 2 examples shown below
hope it helps
Z = 5*abs(Z); % modify here the magnification factor to see effects on plot
Z = 50*abs(Z); % modify here the magnification factor to see effects on plot
[X,Y,Z] = peaks(50);
Z = 50*abs(Z); % modify here the magnification factor to see effects on plot
[maxval, ~] = max(Z(:));
[minval, ~] = min(Z(:));
maxval = ceil(maxval);
minval = floor(minval);
thresholds = [0 20 100 155 231 240 250 255]; % absolute thresholds for data ( 0-20, 20-100, 100-155, 155-231, 231- 240, 240-250, 250-255)
n_thr = numel(thresholds);
mycolormap = jet(n_thr); % NB : Z data can be higher than max value of thresholds
colormap(mycolormap);
% create scaled color values C
C = zeros(size(Z));
for ck=1:n_thr-1
C(Z >= thresholds(ck) & Z < thresholds(ck+1)) = ck; %
end
C(Z >thresholds(end)) = ck+1; % do not forget data higher than max (last) value of thresholds
% plot
figure(1)
surf(X,Y,Z, C);
caxis([1 n_thr]); % freeze C axis (color) range
axis([-3 3 -3 3 0 maxval]);
cb_yticklabels = arrayfun(@num2str,thresholds,'uni',false);
cbh = colorbar;
set(cbh,'ytick',1+(n_thr-1)*(0:n_thr-1)/n_thr);
set(cbh,'yticklabel',cb_yticklabels);
  4 件のコメント
Mathieu NOE
Mathieu NOE 2022 年 8 月 30 日
hello
problem solved ?
Mathieu NOE
Mathieu NOE 2022 年 9 月 12 日
hello again
problem solved ?

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOrange についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by