MATLAB 使用geoshow函数绘制地理分布图时,如何快速批量地给点赋色

博客介绍了如何在Matlab中通过映射方法实现批量给地图上的点进行颜色赋值。首先,通过对原始数据的统计分布处理,将点的值映射到特定颜色范围。然后,利用自定义的colorbar和放缩技巧,将每个点的值对应到特定颜色,并用'geoshow'函数绘制在地图上。最后,展示了调整后的颜色分布效果,实现了地图上点的视觉增强和信息传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于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的名字

最终效果图:
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值