MATLAB绘制台风(Tropical cyclones)风场(Wind field)图、风场动画(Animati ...

打印 上一主题 下一主题

主题 686|帖子 686|积分 2058

简介

风场数据来源ERA5再分析数据集,下载方式网上有许多教程就不重复造轮子了 :
Copernicus Climate Data Store | Copernicus Climate Data Store,也可以直接下载我后文分享的已经下载好的数据进行学习。
台风案例选择了闻名的2015年9号超强台风灿鸿,下图绘出了台风灿鸿的轨迹,数据来源海洋科学大数据中心的中国近海台风路径聚集数据集

风场数据时间选择2015-07-01到2015-07-14,时间分辨率1h,经度范围(110,160)°E,纬度范围(5,45)°N
绘出如下台风期间风场演变,可以清晰看到台风的结构和影响范围

固然也可以生成动画版本的,方便用于演示

 

原始数据

下面直接分享上面提到的台风轨迹、台风期间再分析数据,仅作学习用途,具体请参考相关网站
   通过百度网盘分享的文件:灿鸿风场
链接:https://pan.baidu.com/s/1uJgGYYhqdQa0OKkIETo6nw?pwd=6666
提取码:6666
  
代码

接下来直接分析绘制风场及其动画的代码
起首读取路径下的数据

  1. % 读取ERA5数据
  2. % ncinfo("ERA5.nc") 用于了解NC文件结构
  3. lon = ncread("ERA5.nc",'longitude'); %longitude
  4. lat = ncread("ERA5.nc",'latitude'); %latitude
  5. date = ncread("ERA5.nc",'time'); %时间
  6. date = datetime(1900,1,1) + double(date(:))/24; %时间格式转化
  7. u = ncread("ERA5.nc",'u10'); %速度u分量
  8. v = ncread("ERA5.nc",'v10'); %速度v分量
  9. speed = sqrt(u.^2+v.^2); %速度
复制代码
随后生成m_map的project,在这个project基础上绘制.gif台风动画

  1. % 生成m_map project
  2. m_proj('Equidistant Cylindrical','long',[110 160],'lat',[5 45]);
  3. % 计算坐标对应地图位置
  4. X=[];
  5. Y=[];
  6. for i=1:length(lon)
  7.     for j=1:length(lat)
  8.         [CX,CY]=m_ll2xy(lon(i),lat(j));
  9.         X(i,j)=CX;
  10.         Y(i,j)=CY;
  11.     end
  12. end
  13. for i=1:6:length(date)
  14.     figure;
  15.     % 绘制风场
  16.     hold on
  17.     contourf(X,Y,(speed(:,:,i)),15,'linestyle','none');
  18.     % 海岸线
  19.     m_coast('patch',[.8 .8 .8]);
  20.     % 绘制边框
  21.     m_grid('box','on','tickdir','in','backcolor',[1,1,1],'xtick',[],'ytick',[],'LineWidth',1.5);
  22.     hold off
  23.     % 生成colorbar
  24.     cb = colorbar;
  25.     cb.FontSize=14;
  26.     cb.Label.String='Wind speed (m/s)';
  27.     % 颜色设置
  28.     cr1 = flipud(slanCM(167));%彩色
  29.     cr2 = slanCM(25);%灰色
  30.     colormap([cr2(1:3:83,:);flipud(cr1(1:2:end-3,:))]);% 将低风速设置为灰色,突出高风速台风区域
  31.     % 日期
  32.     XLB = xlabel(string(date(i)),'FontSize',15,'FontWeight','bold');
  33.     set(XLB,'Units','normalized','Position',[0.5,0],'HorizontalAlignment','center','VerticalAlignment','top')
  34.     frame = getframe(gcf);
  35.     im = frame2im(frame);
  36.     [I,map] = rgb2ind(im,256);
  37.     if i == 1
  38.         imwrite(I,map,'windfield.gif','gif', 'Loopcount',inf,'DelayTime',1);
  39.     else
  40.         imwrite(I,map,'windfield.gif','gif','WriteMode','append','DelayTime',1);
  41.     end
  42.     close
  43. end
  44. winopen('windfield.gif')% 预览结果
复制代码
必要注意,以上使用了两个拓展工具箱,m_map(M_Map: A Mapping package for Matlab)和slandarer制作的slanCM颜色拓展包MATLAB | MATLAB配色不够用 全网最全的colormap补充包来啦_matlab color-CSDN博客,固然,各人也可以使用自己的colormap替换这个颜色拓展包,但是M_MAP是必须的。
最后是台风风场瞬时图

  1. %% 提取1:12日每天0点的数据
  2. index = hour(date) == 0& day(date) ~= 13;
  3. date = date(index);
  4. u = u(:,:,index);
  5. v = v(:,:,index);
  6. speed = speed(:,:,index);
  7. %% 绘制台风风场图
  8. % 分子图每幅图一个时刻
  9. t = tiledlayout(3,4);
  10. % 生成m_map project
  11. m_proj('Equidistant Cylindrical','long',[110 160],'lat',[5 45]);
  12. for i = 1:12
  13.     % 生成子图
  14.     nexttile(i);
  15.     hold on
  16.     % 绘制等高线图
  17.     contourf(X,Y,speed(:,:,i),15,'LineStyle','none')
  18.     caxis([0,32])% 颜色上下限
  19.     % 海岸线图
  20.     m_coast('patch',[.8 .8 .8]);
  21.     % m_gshhs_i('patch',[.8 .8 .8]);
  22.     % 绘制边框
  23.     m_grid('box','on','tickdir','in','backcolor',[1,1,1],'xtick',[],'ytick',[],'LineWidth',1.5);
  24.     hold off
  25.     % xlabel
  26.     XLB=xlabel(string(date(i)),'FontSize',15,'FontWeight','bold');
  27.     set(XLB,'Units','normalized','Position',[0.5,0],'HorizontalAlignment','center','VerticalAlignment','top')
  28. end
  29. % 设置间隙
  30. t.Padding='none';
  31. t.TileSpacing="none";
  32. % 生成colorbar,实用Tiledlayout的设置
  33. cb = colorbar;
  34. cb.FontSize=14;
  35. cb.Layout.Tile='east';
  36. cb.Label.String='Wind speed (m/s)';
  37. % 颜色设置
  38. cr1 = flipud(slanCM(167));%彩色
  39. cr2 = slanCM(25);%灰色
  40. colormap([cr2(1:3:83,:);flipud(cr1(1:2:end-3,:))]);% 将低风速设置为灰色,突出高风速台风区域
  41. % 输出图片设置
  42. figWidth = 30; % 设置图片宽度
  43. figHeight = 20; % 设置图片高度
  44. set(gcf,'PaperUnits','centimeters'); % 图片尺寸所用单位
  45. set(gcf,'PaperPosition',[0 0 figWidth figHeight]);
  46. fileout = 'Windfield_Chan_hom'; % 输出图片的文件名
  47. print(gcf,[fileout,'.tif'],'-r300','-dtiff'); % 设置图片格式、分辨率
  48. winopen([fileout,'.tif'])
复制代码
同样使用了M_MAP的拓展包和slanCM的颜色拓展包

结尾

以上就是本次分享的全部内容了
如果觉得有用的话,
感谢您的点赞收藏和关注~
鼓励我继承更新吧!
接待评论区讨论

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

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