Одним из способов достижения этого (есть несколько способов) является использование пользовательского colormap
: создайте цветовую карту только с тем цветом, который вы хотите отобразить на графике, а затем просто отрегулируйте уровни, чтобы средняя точка была равна Z=10
.
В первой части кода показано, как создать свою собственную цветовую карту и применить ее:
Zt = 10 ; % threshold level for Z
z = peaks+Zt ; % dummy test data
% build a colormap with your 2 custom color
% [%Red %green %blue]
cmap = [0.79 0.22 0.81 ; % some kind of purple
0 0 1 ] ; % pure blue
surf(z) ; % plot the surface
colormap(cmap) ; % apply the custom colormap
hcb = colorbar ;
Это создает поверхность с двумя выбранными вами цветами:
Но подождите!Разделение не совсем на уровне Z=10
.Нет проблем, если мы отрегулируем границы цветовой карты так, чтобы ваш пороговый уровень находился на уровне взрыва в середине, Matlab позаботится о том, чтобы настроить цвет для нас:
%% Now center the colormap boundaries around your threshold level
% get the minimum and maximum
zmax = ceil( max(max(z)) ) ;
zmin = floor( min(min(z)) ) ;
span = max( [zmax-Zt, Zt-zmin] ) ; % calculate the span each side of [Zt]
caxis([Zt-span , Zt+span]) ; % center the colormap around [Zt]
Последний бит кода выше позволяет определить равный интервал вокруг выбранного вами порогового уровня и принять во внимание содержание данных Z
.Если вы заранее знаете пределы своих данных, вам не нужно делать расчеты.В приведенном выше примере я мог бы также просто использовать последнюю строку с некоторыми жестко закодированными значениями:
caxis([0 , 20]) ;
Пока интервал, который вы указываете для caxis
, центрируется вокруг вашего порогового уровня, он будет работать.
Редактировать:
Чтобы управлять надписями цветовой шкалы, я обычно устанавливаю Ticks
и TickLabels
после colorbar
(или * 1037)*) создано.Для этого вам понадобится дескриптор объекта colorbar
.
Обратите внимание, что в приведенном выше коде я изменил последнюю строку первого блока кода .Я изменил colorbar
на hcb=colorbar;
.Таким образом, у нас есть дескриптор цветовой полосы, который позволяет нам устанавливать любой произвольный тик и связанную метку.
Самый простой способ получить ваш результат для этого конкретного примера:
hcb.Ticks = [ 5 , 10 , 15 ] ;
hcb.TickLabels = {'<10','10','>10'} ;
Однако, если вам нужно более общее решение, которое может работать с любым порогом Zt
, вы можете использовать:
%% adjust colorbar labels
zl = caxis ; % get the limits of the color scale
Zstr = num2str(Zt) ; % get a string representing the threshold
hcb.Ticks = [ (Zt+zl(1))/2 , Zt , (zl(2)+Zt)/2 ] ;
hcb.TickLabels = { ['<' Zstr] , Zstr , ['>' Zstr] } ;
Для вашего примера оба варианта дают: