作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

飓风"桑迪" (Sandy)横扫美国东部,并在纽约附近登录,带走113条人命,并造成500亿美元的损失,桑迪也被列为美国历史上最昂贵的飓风。我们今天利用之前介绍过的Python的matplotlib和basemap包,来制作桑迪的路径图,重构桑迪的整个发育过程。

下面是做成动画效果的GIF图 (由于博客园不允许上传2M以上的图片,所以分辨率有限,但你总可以作出一个高分辨率的动画。)

我在图画中加入阴影,以显示夜晚时间。可以看到,桑迪形成之后,先在巴拿马附近徘徊,随后穿过古巴,并在此过程中加强为Hurricane-2。随后桑迪划过美国东海岸,之后突然转向西,直奔纽约,并于29日下午在纽约南侧登录。

下载:数据文件

数据文件中的wind(最大风速)单位为knot,pressure(气压)单位为mb,时间为世界时。

绘制路径图的Python源码

View Code

# Written by Vameifrom datetime import datetime, timedelta
import re
import numpy as npimport matplotlib
matplotlib.rcParams['text.color'] = 'white'
matplotlib.rcParams['xtick.color'] = 'white'
matplotlib.rcParams['ytick.color'] = 'white'from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as pltfont = 'monospace'# This function is to plot the base map
def plotBase(fig, dt=None):m = Basemap(projection='merc',lon_0=0,lat_0=0,lat_ts=0,llcrnrlat=0,urcrnrlat=50,llcrnrlon=-100,urcrnrlon=-50,resolution='l')m.drawcountries(linewidth=1, color='k')m.drawmapscale(-90, 5, -90, 5, 1000, barstyle='fancy')m.bluemarble(scale=1)# Get Position of NYC, longitude -74.0064, latitude 40.7142x,y    = m(-74.0064, 40.7142)# Plot NYCm.scatter(x, y, s=100,  marker='*', color='0.5', alpha=1)plt.text(x,y,'NYC', fontsize='15')if dt is not None: m.nightshade(dt, alpha = 0.3)return m# Hurricane category colors
color_dict = {'TROPICAL DEPRESSION':'#AEF100', 'TROPICAL STORM':'#FFD600', 'HURRICANE-1':'#FF6440', 'HURRICANE-2':'#8506A9'}# Read data file, unzip from track.zip to get track.dat
fn  = 'track.dat'
rec = {'lat':[],'lon':[],'wind':[],'press':[],'dt':[],'cat':[]}
for i,line in enumerate(file(fn)):if i == 0: continue  # Jump over the first line# replace multiple whitespaces with a single whitespaceline   = re.sub(r"\s+", ' ', line)pieces = line.split(" ")# retrieve informationrec['lat'].append(float(pieces[0]))rec['lon'].append(float(pieces[1]))rec['wind'].append(float(pieces[3]))rec['press'].append(float(pieces[4]))rec['cat'].append((" ".join(pieces[5:])).strip())time   = pieces[2]time   = "2012/" + timerec['dt'].append(datetime.strptime(time,"%Y/%m/%d/%HZ"))# Plot the track and the else
N = len(rec['lat'])
for idx in range(N):dt     = rec['dt'][idx]# Adjust time zone according to NYClt     = dt - timedelta(hours=5)lon    = rec['lon'][idx]lat    = rec['lat'][idx]wind   = rec['wind'][idx]press  = rec['press'][idx]cat    = rec['cat'][idx]fig    = plt.figure()m      = plotBase(fig, dt)# From lon,lat to pixelsx,y    = m(lon, lat)# Plot trackfor i in range(idx):a0,b0 = m(rec['lon'][i], rec['lat'][i])a1,b1 = m(rec['lon'][i+1], rec['lat'][i+1])m.plot((a0,a1),(b0,b1), linewidth=2.5,color=color_dict[rec['cat'][i+1]])# Plot Sandy's current positionm.scatter(x, y, s=100, c=color_dict[cat], alpha=0.8)# Annotate current position
    plt.annotate(cat, xy = (x, y), xytext = (-5, -30),textcoords = 'offset points', ha = 'right', va = 'bottom',bbox = dict(boxstyle = 'round,pad=0.5', fc=color_dict[cat], alpha = 0.8),arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0'))tx, ty = m(-98, 40)plt.text(tx,ty, lt.strftime("Hurricane Sandy\n\nNYC LT:\n%Y-%m-%d %H:00:00\nData Source: NOAA\nBy Vamei"), family=font,ha='left')# add a small axes to show pressurea = fig.add_axes([0.6,0.2,.15,.1])a.set_ylim((950,1000))a.set_xlim((-10,70))a.set_yticks([900,1050])a.set_xticks([0,60])a.set_title("Center Pressure (mb)", fontsize=10)a.plot(rec['press'])a.axvline(x=idx, color='r')# add a small axes to show winda = fig.add_axes([0.6,0.4,.15,.1])a.set_ylim((0,100))a.set_xlim((-10,70))a.set_yticks([0,100])a.set_xticks([0,60])a.set_title("Max Wind (knots)", fontsize=10)a.plot(rec['wind'])a.axvline(x=idx, color='r')fig.savefig(('%04d.png' % idx))plt.close()

下面放一个桑迪的卫星图,显示一下桑迪的惊人尺寸(来自NASA的GOES卫星)

桑迪带来的大小灾难:

飓风“桑迪”路径图的制作相关推荐

  1. OD图 arcgis曲线制作插件 od图曲线 路径图曲线制作插件 航线图曲线制作插件

    需要插件可私信我~ 本文介绍的是基于ArcGIS绘制OD网络图,"O"表示Origin,指出行的出发地点,"D"表示Destination,指出行的目的地,OD ...

  2. arcgis中制作出行od图_arcgis制作坡度图

    坡度图制作方法 坡度图制作方法 1 坡度分级标准 按照耕地坡度分级的要求,对耕地坡度分为五级,即小于等于 2°为Ⅰ级,大于 2°.小于 等于 6°为Ⅱ级,大于 6°.小于等于 15°的为Ⅲ级,大于 1 ...

  3. 迪文串口屏幕制作(连载一)=====准备工作

    前言 利用QT编写串口和CAN的显示程序后,初步在电脑界面上显示单片机上传数据并绘图.实际装置中需要用屏幕显示实时数据,所以必须利用现有屏幕进行设计. 选择迪文屏幕原因: (1)价格便宜,在同等屏幕中 ...

  4. 医院内导航及智能导医,医院导诊图怎么制作?

    在大型综合性医院,由于专业分工精细,一个诊疗过程涉及的功能单元往往分布在不同的楼宇.不同楼层的不同位置,再加上多数患者对医院环境不熟悉,导致滞院的时间长.诊疗效率低.患者对服务的满意度下降.为解决这一 ...

  5. 半个月爆肝,Python学习指南:学习方法、路径图、资料都备齐了!

    1.6米长,八年Python使用经验,耗时半月,制作了这张Python学习路径图! 视频大纲: 自己的课代表 1.为什么学习python 00:43 2.python学习路径图和python备忘手册( ...

  6. 图种制作器单文件版V1.0下载 | 含图种制作器使用方法

                   图种制作器是一款能将压缩文件和普通图片文件想结合的实用小工具,制作后的效果是大家看到的是图片,将文件后缀改为rar或是zip格式即可获得一个压缩包,可以用于营销推广的操作 ...

  7. 测绘地图资源不够用?教你个万能图源制作方法

    图源是什么 经常会听到XX图源这一说法,那么图源是什么呢?图源,并不是地图本身,而是地图的索引文件.具体来说,Web地图以瓦片金字塔形式存放在服务器上,数据量很大.在地图加载的时候,为了找到浏览区域对 ...

  8. 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示...

    1.条件随机场概念 CRF,Conditional Random Field,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模式,其特点是假设输出随机变量构成马尔可夫随机场. 条件随机场 ...

  9. 极客学院职业路径图课程视频下载-爬虫

    一.序言 最近看了极客学院的视频教程,相当不错,渴望把视频下载到本地.手动下载耗时耗力,因而决定研究一番,写一程序自动下载,终于小有成果!有图为证: 二.技术难点 既然要实现自动下载,免不了要爬取极客 ...

最新文章

  1. api 规则定义_API有规则,而且功能强大
  2. HP前女老板Dunn和Carly的琐碎事
  3. 利用 Azure Functions 实现无服务器体系结构
  4. 人工神工机器人是什么_为什么企业要用电销机器人代理人工
  5. 钉钉自带浏览器版本过低,导致Object.assign不兼容...
  6. win 7 连接打印机
  7. Qt5 自创简单音乐视频播放器(基础版)
  8. [暗黑破坏神2]PLUGY与HACKMAP共存
  9. Dbgview调试工具的使用
  10. 联想电脑linux显卡驱动,哪里下载独立显卡驱动 急急急!!联想y470如何在linux下安装显卡驱动啊?你好...
  11. 必须重新启动计算机才能更改应用,必须重新启动计算机才能应用这些更改
  12. Win10小键盘不能使用的解决办法
  13. 面试官:怎么不用定时任务实现关闭订单?
  14. 苹果为小学生推出编程指南
  15. 利用 GDB 快速阅读 postgresql 的内核代码
  16. 阿里巴巴离职DBA_35岁总结的职业生涯
  17. 【解决方案】智慧幼教:TSINGSEE青犀视频如何助力幼儿园智能化建设?
  18. (翻译)Pachyderm介绍-建造一个现代的Hadoop
  19. MT2503资料汇总,MT2503原理图
  20. android配置文件保存到本地(SP)

热门文章

  1. 年终重磅:解密全球30家搅局者和355家上市路上的科技公司
  2. 人工智能的价值地图:AI产业增强革命的模式与路径
  3. 从自来水公司到社会工作者再做运维,我深耕 IT 一线的这 8 年
  4. 微软大神“玩”出新花样,求平均值代码还能这样写?
  5. 阿里宣布开源Flutter应用框架Fish Redux!
  6. 【HDOJ 3652】B-number
  7. 中了Globelmposter3.0,后缀为4444怎么解决勒索病毒解密
  8. 在一个夜黑风高的夜晚,坐在教室里学多线程
  9. iOS下载历史版本APP
  10. hdu1874 畅通project续 最短路 floyd或dijkstra或spfa