爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23935|回复: 20

[程序设计] 利用MATLAB的m_map工具箱绘制站点气象要素等值线分布图

[复制链接]

新浪微博达人勋

发表于 2015-11-1 22:07:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 1434272731 于 2015-11-1 22:19 编辑

       最近要用到程序计算出来站点的资料绘制等值线的分布形态,之前是用Sufer画的,今天突发奇想,想试试用MTLAB画是什么效果,于是就开始了尝试。
      想用MATLAB做这样的图必须要使用地图工具箱,于是网上搜了一下,大多数人并不用MATLAB自带的mapping工具箱(并不知道具体是什么原因,但肯定有功能不够强大的原因),而是用一个叫m_map工具箱。于是我也下载此工具箱并加载到MATLAB中。
      m_map下载地址请戳:http://www.eos.ubc.ca/~rich/map.html
      压缩包很小,也不到700K,下载结束后,将其解压到MATLAB安装文件的"/toolbox"目录下,并将m_map工具箱所在路径复制下来,打开MATLAB命令窗口,输入:
     addfile  你的m_map所在路径,如:addfile  e:/matlab/toolbox/m_map
这就添加了m_map工具箱,检查是否成功添加:输入:
     which m_coast.m
如果命令框中显示了m_coast.m所在的绝对路径,则说明你已经成功添加了m_map工具箱
接着,就可以绘制图形了!

%snow_depth_draw
clc;clear all;close all;
A=load('D:\cryosphere_environment\EOF_snowcover\surfer_draw\winter_depth_mode1.dat');
lat=A(:,2);
lon=A(:,1);
value=A(:,3);
[X1 Y1] = meshgrid(64.52:0.2:104.64,25.69:0.2:45.10);
[X,Y,Z] = griddata(lon,lat,value,X1,Y1);
figure(1);
ma=shaperead('C:\Users\dell\Desktop\qzgy.shp'); %  读取高原边界shp文件,a为结构体。输入whos a 可查看结构体
%mb=shaperead('bou2_4p.shp');% 省界
bou1_4lx=[ma(:).X]; % 提取经度
bou1_4ly= [ma(:).Y]; % 提取纬度
m_proj('Transverse Mercator','lon',[64.52,104.64],'lat',[25.69,45.10],'aspect',.8);
m_plot(bou1_4lx,bou1_4ly);    %绘图,查看边界是否正确,注意其实国界在省界之内,不必提取国界也可以由省界表示出国界来。
hold on
grid off
%bou1_4px=[mb(:).X];%同上(如有省界的话去掉注释)
%bou1_4py=[mb(:).Y];%同上
%m_plot(bou1_4px,bou1_4py)%同上
%provence=[bou1_4px',bou1_4py'];
%save prov.datprovence–ascii;
%hold on;
m_pcolor(X,Y,Z);  
shading flat
%shading interp     %画图去掉黑色网格线画图语句后面加命令shading interp,这样整个图就连续光滑了
% 如果不想在边界插值平滑:set(h,'edgecolor','none')
colorbar('h');
hold on;
[cs,h]=m_contour(X,Y,Z,'linewidth',1);
%clabel(cs,h,'fontsize',6);
%m_grid('linest','none','linewidth',1.5,'tickdir','out','FontSize',12);  %控制坐标轴上的字体大小
m_grid('FontSize',14)
%m_grid
xlabel('Longitude','fontsize', 14);  %控制坐标轴名称的字体大小
ylabel('Latitude','fontsize', 14);  %控制坐标轴名称的字体大小
title('The fist vector feild of winter snow depth','fontsize', 14);

     结果如下图,图不漂亮,还有很多需要改进的地方,比如填色图的颜色范围不能和边界完全重合,导致边界地方很难看,还希望有经验的大神可以指教指教,本人将感激不尽!
      大家可以根据自己的绘制范围去选择和下载.shp底图,并合理设置经纬度范围绘图。今天就说到这里吧,第一次发帖,还望大家提出宝贵意见!

结果图

结果图

评分

参与人数 1金钱 +3 收起 理由
charye + 3 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-2 08:25:13 | 显示全部楼层
一直在用,但是一直都没有找到可以画流线的程序,请问楼主知道吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-2 19:40:19 | 显示全部楼层
m_map包里没有绘制流函数的函数,但是MATLAB里面有streamline()函数,可以打开streamline.m文件参照自己写一个m_streamline,不过不知道这个是不是挺麻烦的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-2 22:26:11 | 显示全部楼层
本帖最后由 zhaojing 于 2016-8-28 22:06 编辑

太感谢了!!非常感谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-2 22:53:03 | 显示全部楼层
zhaojing 发表于 2015-11-2 22:26
太感谢了!!非常感谢

楼主根据这个画出图来了吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-28 16:09:03 | 显示全部楼层
该图中如何设置坐标轴字体的角度和内容?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-12 16:25:52 | 显示全部楼层
楼主,我按你的方法进行下载,但是一直都没有添加成功
一直显示>> addfile D:\MATLAB\R2014b\toolbox\m_map
未定义与 'char' 类型的输入参数相对应的函数 'addfile'。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2017-4-15 08:49:27 | 显示全部楼层
2292163582 发表于 2017-4-12 16:25
楼主,我按你的方法进行下载,但是一直都没有添加成功
一直显示>> addfile D:\MATLAB\R2014b\toolbox\m_ma ...

请参考本版置顶帖
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-21 13:49:55 | 显示全部楼层
谢谢{:5_213:}{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

jia123 该用户已被删除
发表于 2017-11-22 11:12:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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