使用cbfit matlab自定义Colormaps

时间:2014-11-12 10:38:59

标签: matlab

您好我正在尝试根据颜色条的刻度值来估算我的色彩图。我用5种颜色定义了自己的颜色条,例如从蓝色到红色的5种颜色

cmap_my=[0 0 1;0 1 1;0 1 0; 1 1 0; 1 0 0];

比我想要的每一个滴答的颜色都会改变。通过使用cbfit,如果滴答在0:40范围内均匀分布,则颜色会根据刻度而变化,但我的滴答是

h = colorbar;
set(h,'YTick',[5,10,15,22,30,35,40]);

并且我的范围高达45.除此之外,当我使用cbfit时,我定义的颜色不再显示。是否有可能给出一定的颜色范围,例如从5到10深蓝色10到15浅蓝色15到22绿色22到30浅黄色30到35黄色35到40橙色和超过40红色,而不是在蜱?

1 个答案:

答案 0 :(得分:0)

我希望我理解你的问题。这是一个例子。您可以在这里为您的特定颜色工作。

mri=load('mri');
mri=double(mri.D(:,:,1,13));
%making my image within the same range as yours
mri=(mri-min(mri(:)))./(max(mri(:))-min(mri(:)))*45;
figure,imagesc(mri),axis off,axis image,h_bar=colorbar;

%h_map(1) is related with the min(mri), and h_map(end) with max(mri)
h_map=colormap; 
min_mri=0;
max_mri=45;

lim=eps*100;
my_map_int=[0-lim,5-lim,5+lim,10-lim,10+lim,40-lim,40+lim,45+lim];
my_map_color=[0,0,0;0,0,0;0,0,1;0,0,1;0,1,0;0,1,0;1,0,0;1,0,0];

new_map_color(:,1)=interp1(my_map_int,my_map_color(:,1),linspace(min_mri,max_mri,64),'nearest');
new_map_color(:,2)=interp1(my_map_int,my_map_color(:,2),linspace(min_mri,max_mri,64),'nearest');
new_map_color(:,3)=interp1(my_map_int,my_map_color(:,3),linspace(min_mri,max_mri,64),'nearest');

figure,imagesc(mri),axis off,axis image
colormap(new_map_color)
colorbar