爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6051|回复: 8

画图出现问题

[复制链接]
发表于 2014-7-2 09:32:02 | 显示全部楼层 |阅读模式
MATLAB
问题截图:
问题概况: 画不出南北美洲轮廓
我看过提问的智慧: 看过
自己思考时长(天): 7
系统平台:

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

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

x
这是绘制程序:
x=0:2.5:357.5;  %经度范围
y=-90:2.5:90;  %维度范围
x=x';
for k=1:73
    kk=(k-1)*144+1;
    R3(:,k)=R2(kk:(kk+143));    %把数据排列成矩阵形式,144行(经度),73列(纬度)
    P3(:,k)=P2(kk:(kk+143));    %把数据排列成矩阵形式,144行(经度),73列(纬度)
end
R4=R3';   %矩阵转置:73行,144列
P4=P3';   %矩阵转置:73行,144列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1)
v1=-0.1:-0.1:min(min(R4));
v1=fliplr(v1);
v2=0:0.1:max(max(R4));
[c,h]=contour(x,y,R4,v2); %绘制等高线
set(h,'ShowText','on','Linestyle','-','Color','b')
hold on
[c,h]=contour(x,y,R4,v1); %绘制等高线
set(h,'ShowText','on','Linestyle',':','Color','r')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hold on
[c,h]=contourf(x,y,-P4,[-0.05 0]); %绘制等高线
title('June(same year)')
%%%%%%%%%%%%%%%%%%%%%%%
%mapping world coast
hold on
load coast
a=length(lat);
b=length(long);
for i=600:b/2.25
    if long(i)<0   
        long(i)=long(i)+360;
    end
end
geoshow(lat,long);
grid on
xx=0:30:330;
yy=-90:30:90; 3.tif (2.55 MB, 下载次数: 2)
密码修改失败请联系微信:mofangbao
发表于 2014-7-2 10:14:23 | 显示全部楼层
好像不止南北美洲轮廓,从东京180往东的海岸轮廓都没有,感觉像是循环哪里出问题了,话说绘制这种等值线图为什么用matlab,用grads很快很方便
密码修改失败请联系微信:mofangbao
发表于 2014-7-2 13:24:50 | 显示全部楼层
估计你coast里long范围是【-180 180】
b=length(long);是long个数
为什么下边是for i=600:b/2.25,这样你循环肯定考虑到long截尾
通过读你的程序,我的理解是:
long是【-180 180】,但是前600之后才是西经,所以你才会从600开始
你想把西经变为正数,没那么麻烦,不用循环
直接index=find(long<0) ;  long(index)=long(index)+360;
密码修改失败请联系微信:mofangbao
发表于 2014-7-2 13:25:13 | 显示全部楼层
估计你coast里long范围是【-180 180】
b=length(long);是long个数
为什么下边是for i=600:b/2.25,这样你循环肯定考虑到long截尾
通过读你的程序,我的理解是:
long是【-180 180】,但是前600之后才是西经,所以你才会从600开始
你想把西经变为正数,没那么麻烦,不用循环
直接index=find(long<0) ;  long(index)=long(index)+360;
密码修改失败请联系微信:mofangbao
发表于 2014-7-2 14:34:54 | 显示全部楼层
晓风残月 发表于 2014-7-2 10:14
好像不止南北美洲轮廓,从东京180往东的海岸轮廓都没有,感觉像是循环哪里出问题了,话说绘制这种等值线图 ...

windows下可以在C++中调用grads画图吗
密码修改失败请联系微信:mofangbao
发表于 2014-7-3 09:55:46 | 显示全部楼层
striver_zhu 发表于 2014-7-2 14:34
windows下可以在C++中调用grads画图吗

这个没有听说过,没必要混编啊,直接编写grads就好。或者matlab程序再改改也行,我觉得问题就在coast设置的long的循环里。
密码修改失败请联系微信:mofangbao
发表于 2014-7-6 12:06:47 | 显示全部楼层
晓风残月 发表于 2014-7-3 09:55
这个没有听说过,没必要混编啊,直接编写grads就好。或者matlab程序再改改也行,我觉得问题就在coast设置 ...

我在windows下做编程开发,想把这个做第三方插件使用。。。
密码修改失败请联系微信:mofangbao
发表于 2014-7-7 22:20:53 | 显示全部楼层
本帖最后由 沙颖凯 于 2014-7-7 22:25 编辑

你把地形数据由-180 180转换成0 360的过程出错了,海岸线数据因为不是规则的网格所以事实上没有完美的转换方案。单纯把小于0的值加上360是用不了的。楼主可以选择把要画图的数据x, y转换成-180 180的,或者启用专门的地理绘图环境来画。
密码修改失败请联系微信:mofangbao
发表于 2014-7-7 22:21:46 | 显示全部楼层
帮定{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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