由于matlab的geoshow不支持批量给点赋色,所以采用映射的方法将每个点的对应颜色算出来,从而实现快速着色,原始数据分布的统计分布如下图a所示,映射后对应的数值的统计分布如下图b所示:
%% 仅保留[-0.002,0.002]之间的降雪比例趋势
slope_all(slope_all<-0.002) = -0.002;
slope_all(slope_all>0.002) = 0.002;
slope_all = slope_all+0.002; %将slope变为正值,便于放缩
load c_MPL_RdBu.mat %这个colorbar是我自己的,128*3,颜色从红到蓝
slope_all = slope_all*(size(mycmap,1)-1)/0.004; %放缩映射,但考虑到0值,所以-1
slope_all = round(slope_all)+1; %四舍五入,以便于找到对应的颜色,此时的slope_all的分布为图b
%% 绘图
figure(1)
ax = worldmap([30 90],[-180 180]); %研究区范围
% setm(ax,'MeridianLabel','off');%去除经度
setm(ax,'parallelLabel','off'); %去除纬度
% setm(ax,'Origin',[0 0]); %确定世界地图的中心
geoshow('landareas.shp', 'FaceColor', [0.85 0.85 0.85], 'EdgeColor', [1 1 1],'FaceAlpha',0.5)
for i = 1:size(mycmap,1)
geoshow(lat(slope_all == i),lon(slope_all == i),'displaytype','point','MarkerFaceColor',mycmap(i,:),'MarkerEdgeColor',mycmap(i,:),'markersize',3,'Marker','o')
end
hco = colorbar;
set(get(hco,'label'),'string','trend of sf (%/year)','FontSize',15);
hco.Position = [0.78,0.11,0.02,0.82];
colormap(mycmap)
caxis([-0.2 0.2])
set(gca,'fontsize',15)
h = figure(1);
set(h,'units','normalized','position',[0.1 0.1 0.5 0.5]);
说明:代码中出现的四个变量lat为所有点的纬度坐标向量,lon为所有点的经度坐标向量,slope_all为所有点的值向量,大小均为n*1,而mycmap我的colorbar的名字
最终效果图: