matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节, colorbar加单位等)
matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节等
对matlab关于colorbar的一些小细节进行整理,希望对一些人能够有所帮助~
1. 绘制不等间距colorbar
本人常用的方法是将某一区间内的数值全都换成同一个数字,最后绘制替换后的数字。
(1) 将某一区间的数值换成同一个数字(本人习惯写一个函数),要注意转换后的数字与转换前的不要有重合,否则会把转换前后数字弄混。
function [R] = Model_to20_unequal_compare(vari,level)
%此函数进行不等间距前的变量转换
% vari是要转换的变量,level是目标的不等间距,R是转换后的变量
R = vari;
R(find(vari<0.1)) = -200.1; %将R里面小于0.1的全都换成-200.1
R(find(vari>=0.1&vari<0.28)) = -195.1; %将R里面大于等于0.1,小于0.28的全都换成-195.1
R(find(vari>=0.28&vari<0.46)) = -190.1;
R(find(vari>=0.46&vari<0.64)) = -185.1;
R(find(vari>=0.64&vari<0.82)) = -180.1;
R(find(vari>=0.82&vari<1)) = -175.1;
R(find(vari>=1&vari<1.8)) = -170.1;
R(find(vari>=1.8&vari<2.6)) = -165.1;
R(find(vari>=2.6&vari<3.4)) = -160.1;
R(find(vari>=3.4&vari<4.2)) = -155.1;
R(find(vari>=4.2&vari<5)) = -150.1;
R(find(vari>=5&vari<6)) = -145.1;
R(find(vari>=6&vari<7)) = -140.1;
R(find(vari>=7&vari<8)) = -135.1;
R(find(vari>=8&vari<9)) = -130.1;
R(find(vari>=9&vari<10)) = -125.1;
R(find(vari>=10&vari<11)) = -120.1;
R(find(vari>=11&vari<12)) = -115.1;
R(find(vari>=12&vari<13)) = -110.1;
R(find(vari>=13&vari<14)) = -105.1;
R(find(vari>=14&vari<15)) = -100.1;
R(find(vari>=15&vari<16)) = -95.1;
R(find(vari>=16&vari<17)) = -90.1;
R(find(vari>=17&vari<18)) = -85.1;
R(find(vari>=18&vari<19)) = -80.1;
R(find(vari>=19&vari<20)) = -75.1;
R(find(vari>=20)) = -70.1;
end
(2) 绘制R的填色图,即为不等间距填色图
%------------------------------中国地图-------------------------------------
infoL=shapeinfo('E:\4.Matlab\shp\全国省级、地市级、县市级行政区划shp\全国省级、地市级、县市级行政区划shp\bou2_4l.shp');%中国省界线文件(含九段线)
infoP=shapeinfo('E:\4.Matlab\shp\全国省级、地市级、县市级行政区划shp\全国省级、地市级、县市级行政区划shp\bou2_4p.shp');%中国面文件
ChinaL=shaperead('E:\4.Matlab\shp\全国省级、地市级、县市级行政区划shp\全国省级、地市级、县市级行政区划shp\bou2_4l.shp');
ChinaP=shaperead('E:\4.Matlab\shp\全国省级、地市级、县市级行政区划shp\全国省级、地市级、县市级行政区划shp\bou2_4p.shp');
bou2_4lx=[ChinaL(:).X];bou2_4ly=[ChinaL(:).Y];
bou2_4px=[ChinaP(:).X];bou2_4py=[ChinaP(:).Y];
World = shaperead('E:\4.Matlab\shp\world map china line\world map china line.shp');
wx = [World(:).X];
wy = [World(:).Y];
figure(1)
subplot(1,2,1)
m_proj('miller','lon',[70,135],'lat',[15,55]);
m_pcolor(lon,lat,R);%绘制的是转换后的R
hold on
shading flat;
%中国国界线省界线
m_plot(bou2_4lx,bou2_4ly,'k','linewidth',1.5);m_plot(wx,wy,'linewidth',1.5,'color',[0.4 0.4 0.4]);
colormap(CM_bl2ye2re28(1:end-1,:));%自定义的colormap
%!!!这里的caxis一定要注意,是转换后的max和min
caxis([-205 -70]);
m_grid('linestyle','none');
title('BCC-ESM1_DUSTmean2000-2014','fontsize',15,'interpreter','none');
%%修改位置
NN=1;
H(NN) = subplot(1,2,NN);%第NN张子图
POS = get(H(NN),'pos');%第NN张子图的当前位置
POS = POS + [-0.04 -0.037 0.06 0.06];
set(H(NN),'pos',POS)%根据新的边界设置
(3) 修改colorbar的刻度
%自定义colorbar的刻度
level1 = {'0','0.1',' ',' ',' ',' ','1.0',' ',' ',' ',' ','5.0',' ',' ',' ',' ','10.0',' ',' ',' ',' ','15.0',' ',' ',' ',' ','20.0',' '};
axes('position',[.16,.09,.68,.55]);
axis off
hh = colorbar('horiz');hh.Ticks = [-205:5:-70];hh.TickLabels = level1;caxis([-205 -70]);
set(get(hh,'title'),'string','\mug/m^{3}','position',[810 -12]);
以上就是我熟悉并且我经常用的绘制不等间距colorbar的方法,如果其他小伙伴有更好的方法,欢迎一起讨论交流~
2. colorbar的大小位置调节
(1) 绘制横着的colorbar
hh = colorbar('horiz');
(2) 调节colorbar的大小和位置
hh = colorbar;hh.Ticks = [0:4:64];hh.TickLabels = level1;caxis([0 64]);
%调整colorbar的位置(0.16对应左下角的x起点,-0.026对应y起点,0.007对应增加的x长度,0.52对应增加的y长度)
%0.16和-0.026是对colorbar位置进行调整,0.007和0.52是对colorbar的长宽进行调整
POS = get(hh,'pos');POS = POS + [0.16 -0.026 0.007 0.52];set(hh,'pos',POS)
set(get(hh,'title'),'string','\mug/m^{3}');
3. 更改colorbar上的刻度、给colorbar加单位
(1) 更改colorbar上的刻度
%0-64是进行不等间距转换后的数值
%level1是自定义的colorbar刻度
hh = colorbar;hh.Ticks = [0:4:64];hh.TickLabels = level1;caxis([0 64]);
(2) 给colorbar加单位
hh = colorbar;
set(get(hh,'title'),'string','\mug/m^{3}');