Matlab绘制不等间隔colorbar+调整地区投影经度位置

模式IPSL的降水指数PRCPTOT的毁林响应

%%%%IPSL
%数据处理
load('F:\毕业论文\program\Data\treeFrac_res\IPSL_deFrac.mat');
initial_datafile='F:\毕业论文\program\Data\treeFrac_initial\IPSL_';
expr_res_datafile='F:\毕业论文\program\Data\extreme_pr_res\IPSL_';
expr_datafile='F:\毕业论文\program\Data\extreme_yr_pr\IPSL\IPSL_';
load([initial_datafile,'lat']); load([initial_datafile,'lon']);
load([expr_res_datafile,'PRCPTOT_res.mat']);
load([expr_res_datafile,'mod_PRCPTOT_res.mat']);
 
%找出通过检验的点并将其坐标保存下来
sclat=[]; sclon=[];scres=[];
for i=1:2:length(lat); %R10mm,R20mm,PRCPTOT--2 SDII--1
    for j=1:2:length(lon);
        if isnan(mod_PRCPTOT_res(i,j))==0;  
            sclat=[sclat;lat(i)];
            sclon=[sclon;lon(j)];
            scres=[scres;mod_PRCPTOT_res(i,j)];
        end
    end
end
 
**[Lon,Lat] = meshgrid(lon,lat);
m = find(lon-180==min(abs(lon-180)));
%重新排列数据,使其位于我为投影给出的经度限制中
ind=[m+1:length(Lon(1,:)) 1:m]; % Move left side to right
mod_PRCPTOT_res = mod_PRCPTOT_res(:,ind);
PRCPTOT_res = PRCPTOT_res(:,ind);
deFrac=deFrac(:,ind);
Lat=Lat(:,ind);
Lon=Lon(:,ind);
Lon(Lon>180)=Lon(Lon>180)-360; %...and subtract 360 to some longitudes**
 
%不等间隔绘图
**edges=[-250 -200 -150 -100 -50 50 100 150 200 250 300];  %  PRCPTOT
[A,new_pr]=histc(PRCPTOT_res,edges);  %利用函数histc按照所需间隔将原数据进行分类**
for i=1:size(PRCPTOT_res,1);
    for j=1:size(PRCPTOT_res,2);
        if isnan(PRCPTOT_res(i,j))==1;
            new_pr(i,j)=NaN;
        end
    end
end
m_proj('robinson','longitudes',[lon(m+1)-360 lon(m)],'latitudes',[-90 90]);
m_pcolor(Lon,Lat,new_pr);
colormap(C_brown2blue_11);
caxis([0 length(edges)]) ;
**cbar = colorbar;
set(cbar,'Ticks',1:length(edges)-1,'TickLabels',edges) ;
set(cbar,'TickLength',0);**

这里edges即为色卡中想要的间隔设定,图中并未展现间隔的不等,读者可自行设定,设定原理如下:

设定时应当注意原数据与分类后的新数据以及colorbar所设颜色的对应关系;
在这里插入图片描述
本程序colormap设有11个颜色,转换到新数据中的数字为0:1:10,对应关系如上图,例:与色卡颜色的对应关系如新数据5对应白色,即原数据-50~50对应白色。
最终在设置colorbar的坐标值时进行一定的调节,set(cbar,‘Ticks’,1:length(edges)-1,‘TickLabels’,edges) ;
仅展示-250~250,即只展示edges第1到10个值。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB 中,可以使用 `contourf` 函数绘制不等间距的等高线图,并使用 `colorbar` 函数添加相应的色标。下面是一个示例代码: ```matlab % 定义 x 和 y 的网格点 x = 1:10; y = 1:10; % 定义 z 的值,这里假设是一个不等间距的数据 z = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 2, 3, 4, 5, 6, 7, 8, 9, 10, 11; 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 4, 5, 6, 7, 8, 9, 10, 11, 12, 13; 5, 6, 7, 8, 9, 10, 11, 12, 13, 14; 6, 7, 8, 9, 10, 11, 12, 13, 14, 15; 7, 8, 9, 10, 11, 12, 13, 14, 15, 16; 8, 9, 10, 11, 12, 13, 14, 15, 16, 17; 9, 10, 11, 12, 13, 14, 15, 16, 17, 18; 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]; % 绘制等高线图 contourf(x, y, z); % 添加颜色条,这里使用自定义的颜色映射 cmap = [1 0 0; 1 1 0; 0 1 0]; cmin = 1; cmax = 19; caxis([cmin, cmax]); colormap(cmap); colorbar('Ticks', linspace(cmin, cmax, size(cmap, 1)), ... 'TickLabels', arrayfun(@(x) num2str(x), linspace(cmin, cmax, size(cmap, 1)), 'UniformOutput', false)); ``` 在上面的代码中,使用 `contourf` 函数绘制了一个不等间距的等高线图,然后使用自定义的颜色映射和 `colorbar` 函数添加相应的色标。其中,`cmin` 和 `cmax` 分别表示颜色条的最小值和最大值,`linspace` 函数用来生成一组均匀分布的刻度值,`arrayfun` 函数用来将刻度值转换为字符串类型,`UniformOutput` 参数用来指定输出结果是否是统一大小的。 需要注意的是,在绘制不等间距的等高线图时,需要确保数据是按照正确的顺序排列的,否则会导致绘图出错。同时,也需要根据具体的需求选择合适的颜色映射和刻度值,以便更好地展示数据的特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值