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

14 Ansichten (letzte 30 Tage)
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 Kommentare
OLUWAFEMI AKINMOLAYAN
OLUWAFEMI AKINMOLAYAN am 15 Jul. 2022
Bearbeitet: OLUWAFEMI AKINMOLAYAN am 15 Jul. 2022
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 am 15 Jul. 2022
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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Mathieu NOE
Mathieu NOE am 15 Jul. 2022
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 Kommentare
Mathieu NOE
Mathieu NOE am 12 Sep. 2022
hello again
problem solved ?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Orange 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!

Translated by