爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6675|回复: 0

[讨论] 关于matlab使用conturf画雨量分布图问题

[复制链接]

新浪微博达人勋

发表于 2019-8-8 11:23:43 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我使用matlab画雨量分布图,插值是用matlab自带的内置函数,插值会有负值,因为我是画降雨分布,所以考虑到在一定区间内(比如插值为-10到0之间的数据我当成是有小雨,赋值为1,在小于-10的区间考虑是无雨,赋值为0),这都不是重点,重点是在我使用contourf画图时,小雨是要涂绿色的,但是我赋值的1和他插值后的大于0小于10的部分值却没有涂成浅绿色,当我把赋值为1的数值改为赋值为9时,它就能涂出来。。。我就很迷惑,我使用的版本是2014版的,我在想,是不是和matlab版本有关,因为我之前用matlab7的时候,同一个程序,使用7.0版本和10.版本得出来的结果不一样,7.0版本得出来的数据是有问题的,不够精确。。。所以这次我在想,contourf画不出某些区间是不是也和版本有关,求大神解答。。。
赋值为1的时候:
ins2=find((Zi>=-(length(num)/90*20))&Zi<=0);
Zi(ins2)=1;
ins1=find(Zi<-(length(num)/90*20));
Zi(ins1)=0;

画出来的图:
1.jpg
赋值为9的时候:
ins2=find((Zi>=-(length(num)/90*20))&Zi<=0);
Zi(ins2)=9;
ins1=find(Zi<-(length(num)/90*20));
Zi(ins1)=0;

画出来的图:
2.jpg
我写的代码:
clc;
clear;
dir='D:\BaiduNetdiskDownload\##西双版纳基础地图资料集##\边界\';
dir1='D:\BaiduNetdiskDownload\##西双版纳基础地图资料集##\边界\乡镇界\';
dir2='D:\BaiduNetdiskDownload\##西双版纳基础地图资料集##\乡镇\';
dir3='\\10.211.196.60\气象台预报服务产品库\高婷婷\';
%geoshow([dir '西双版纳边界.shp']);

[num,txt1,raw1]=xlsread([dir3 'Book1']);
% [num,txt,raw]=xlsread([dir3 '自动气象站名']);
% for i=1:length(num1)
%     kk=find(num1(:,1)==num(i,1)&num1(:,2)==num(i,2));
%     num(i,end)=num1(kk,end);
% end
num(:,3:7)=[];
[a,b]=size(num);
for i=1:a
    rain(i)=num(i,3);
    x(i)=num(i,1);
    y(i)=num(i,2);
end
h=gscatter(x,y);

X=linspace(min(x)-1,max(x)+1,500);
Y=linspace(min(y)-1,max(y)+1,500);
[xi,yi]=meshgrid(X,Y);
[Xi,Yi,Zi]=griddata(x,y,rain,xi,yi,'v4');
[A,map]=shaperead([dir '西双版纳边界.shp']);
[A1,map1]=shaperead([dir1 '景洪乡镇.shp']);
[A2,map1]=shaperead([dir1 '勐海乡镇.shp']);
[A3,map1]=shaperead([dir1 '勐腊乡镇.shp']);
[A4,map1]=shaperead([dir2 '西双版纳乡镇.shp']);

isin1=inpolygon(Xi,Yi,A(1).X,A(1).Y);%白化
isin2=inpolygon(Xi,Yi,A(2).X,A(2).Y);
isin3=inpolygon(Xi,Yi,A(3).X,A(3).Y);
Zi((~isin1)&(~isin2)&(~isin3))=NaN;
ins2=find((Zi>=-(length(num)/90*20))&Zi<=0);
Zi(ins2)=9;
ins1=find(Zi<-(length(num)/90*20));
Zi(ins1)=0;
contourf(Xi,Yi,Zi,5);
shading flat;
colorbar;
hold on;
plot(A(3).X,A(3).Y,'-k',A(2).X,A(2).Y,'-k',A(1).X,A(1).Y,'-k');
for i=1:length(A1)
    plot(A1(i).X,A1(i).Y,'-k');
    hold on
end
for i=1:length(A2)
    plot(A2(i).X,A2(i).Y,'-k');
    hold on
end
for i=1:length(A3)
    plot(A3(i).X,A3(i).Y,'-k');
    hold on
end
set(gca,'xtick',99:0.5:102);
set(gca,'ytick',21:0.5:23);
axis([99.7 102 21 22.7]);
% grid on
% axis off;

%设置图例颜色
z_max=max(max(Zi));
z_min=min(min(Zi));
if z_min<0
    z_min=0;
end
color_data=[];
cmin=z_min;
% cmax=z_max;
% cmin=0;
cmax=150;
caxis([cmin cmax]);
colormap(jet(64));
color_map=cmin:(cmax-cmin)/64:cmax;
size_color=size(color_map);
% RGB数值
    % RGB数值
    % 0-10:155 254 155
    % 10-25:049 205 049
    % 25-50:100 153 255
    % 50-100:000 001 253
    % 100-250:206 049 255
    % 250:154 001 000
sb=[255 255 255;165 243 141;61 185 63;99 184 249;0 0 254;243 5 238;129 0 64]./255;
for i=1:(size_color(1,2)-1)
    if color_map(1,i)==0
        color_data(i,:)=sb(1,:);
    elseif color_map(1,i)>0&color_map(1,i)<=9.9
        color_data(i,:)=sb(2,:);
    elseif color_map(1,i)>9.9&color_map(1,i)<=24.9
        color_data(i,:)=sb(3,:);
    elseif color_map(1,i)>24.9&color_map(1,i)<=49.9
        color_data(i,:)=sb(4,:);
    elseif color_map(1,i)>49.9&color_map(1,i)<99.9
        color_data(i,:)=sb(5,:);
    elseif color_map(1,i)>99.9&color_map(1,i)<249.9
        color_data(i,:)=sb(6,:);
    else
        color_data(i,:)=sb(7,:);
    end
end
colormap(color_data);
title(char(raw1(1,1)),'FontSize',16);
% set(gca,'xtick',[],'ytick',[]);
xlabel('');
ylabel('');



Book1.xlsx

10.26 KB, 下载次数: 5, 下载积分: 金钱 -5

西双版纳乡镇.shp

1.08 KB, 下载次数: 1, 下载积分: 金钱 -5

西双版纳边界.shp

81.9 KB, 下载次数: 2, 下载积分: 金钱 -5

勐腊乡镇.shp

146.55 KB, 下载次数: 2, 下载积分: 金钱 -5

景洪乡镇.shp

279.41 KB, 下载次数: 1, 下载积分: 金钱 -5

勐海乡镇.shp

216.21 KB, 下载次数: 1, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表