Как контролировать цветовые диапазоны цветовой шкалы? - PullRequest
2 голосов
/ 25 сентября 2019

У меня есть следующий код:

[X,Y,Z] = peaks(30);
crange = 1.5;

[maxval dummy] = max(Z(:));
[minval dummy] = min(Z(:));

% green, yellow, red
cmap = [0 1 0; 1 1 0; 1 0 0];  

figure
colormap(cmap); 
surf(X,Y,Z);
caxis([30 55]);
cbh=colorbar;
set(cbh,'Ytick',[30 32 38 55]);

enter image description here

Моя цель - установить пределы цветовой шкалытак что цвета такие:

  • зеленый с 30 до 32
  • желтый с 32 до 38
  • красный с 38 до 55

Полагаю, мне нужно как-то изменить переменную CData, поэтому я безуспешно использовал эти строки кода:

i = findobj(cbh,'type','image');
set(i,'cdata',[30 32 38]','YData',[30 55]);

1 Ответ

5 голосов
/ 25 сентября 2019

Ваша пользовательская цветовая панель состоит из (32-30 = ) 2 + (38-32 = ) 6 + (55-38 = ) 17 = 25 "единиц" цвета.Таким образом, простой трюк будет повторять каждый цвет необходимое количество «единиц»:

function q58097577
[X,Y,Z] = peaks(30); Z = (Z - min(Z(:)))*5;

% green, yellow, red
nG = 32-30; nY = 38-32; nR = 55-38;
cmap = [ repmat([0 1 0], [nG 1]); repmat([1 1 0], [nY,1]); repmat([1 0 0], [nR,1]) ];  

figure()
colormap(cmap); 
surf(X,Y,Z);
caxis([30 55]);
cbh=colorbar;
set(cbh,'Ytick',[30 32 38 55]);

В результате:

enter image description here

...