飓风“桑迪”路径图的制作

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

 

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

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

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

 

下载:数据文件

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

绘制路径图的Python源码

View Code

# Written by Vamei

from datetime import datetime, timedelta
import re
import numpy as np

import 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 plt

font = '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.7142
    x,y    = m(-74.0064, 40.7142)
    # Plot NYC
    m.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 whitespace
    line   = re.sub(r"\s+", ' ', line)
    pieces = line.split(" ")
    # retrieve information
    rec['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/" + time
    rec['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 NYC
    lt     = 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 pixels
    x,y    = m(lon, lat)
    # Plot track
    for 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 position
    m.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 pressure
    a = 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 wind
    a = 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卫星)

 

桑迪带来的大小灾难:

时间: 2024-10-24 04:43:45

飓风“桑迪”路径图的制作的相关文章

纽约时报等网站因飓风“桑迪”暂停收费

http://www.aliyun.com/zixun/aggregation/17197.html">北京时间10月29日晚间消息,为了让人们及时获得飓风"桑迪"的最新动态,<纽约时报>和<华尔街日报(博客,微博)>已经暂时取消了付费新闻. 据媒体报道,从28日晚起,<纽约时报>取消了网站和应用的付费新闻.公司发言人艾琳·墨菲(Eileen Murphy)称:"整个网站和全部应用都取消了付费新闻,直至飓风结束."

超强飓风“桑迪”来袭 飓风域名忙捞金

据路透社报道,截止http://www.aliyun.com/zixun/aggregation/17197.html">北京时间11月2日凌晨4点钟,超强飓风"桑迪"已经导致美国境内重大伤亡,飓风"桑迪"登陆美国并袭击纽约期间,市中心曼哈顿成了孤岛,与外界交通联系断绝.目前,曼哈顿很多地区已经停水停电和网络中断.在美国总统指示下,各部门加入了抢救灾民的行列中. 飓风是太平洋国家对当地热带气旋的俗称,也就是我们亚洲俗称的台风.飓风是发生在热带或副热带

“桑迪”飓风来袭-Facebook也着急

硅谷网10月30日讯 凌晨消息,http://www.aliyun.com/zixun/aggregation/1560.html">Facebook已发出通知称,由于受到"桑迪"(Sandy)飓风的影响,该公司将取消两项活动.在此以前,已有多家公司决定推迟或取消媒体活动. Facebook原定于本周二在纽约办公室进行一次开放参观日活动,允许记者与该公司的部分工程师进行沟通.但Facebook已向媒体发出通知称,"桑迪"飓风来袭已迫使其取消此次活动.

桑迪飓风未对美国互联网服务造成严重影响

中介交易 SEO诊断 淘宝客 云主机 技术大厅 腾讯科技讯(童云)北京时间10月31日消息,虽然一些知名网站的服务中断,造成的"涟漪效应"偶尔导致全美范围的通信速度减缓,但互联网服务安然度过了横扫纽约州和新泽西州的桑迪(Sandy)飓风的冲击,相对来说并未出现重大的问题. 业内专家称,美国互联网服务在构建之初就考虑到了回复力的问题,而且云计算的采用对互联网形成了支撑,因此在这场风暴中,美国互联网服务的运行表现基本上符合预期.美国内容分发网络服务提供商Akamai Technologie

Twitter成桑迪侵袭大赢家:共发2000多万条消息

http://www.aliyun.com/zixun/aggregation/16449.html">CNET科技资讯网 11月05日 国际报道: Twitter称,在此次美国遭遇飓风桑迪侵袭期间,用户通过Twitter发出的关于飓风桑迪的tweets信息超过了2000万条.Twitter称该数字为保守估计,因为其仅仅跟踪了"桑迪"和"飓风"两个关键词. Twitter称,在上周一晚上大约9点左右,用户通过移动设备在Twitter发送信息的数量达到

Photoshop入门实例教程:简单拼贴图的制作方法

本教程介绍简单拼贴图的制作方法.大致过程:处理之前需要用网格及辅助线把素材均分成一些小方块,然后分别用选区把这些小方块复制到新的图层,适当给小方块描边并添加投影.最后把小方法变形处理,再改变背景颜色即可.原图 最终效果 [1] [2] [3]  下一页

调用xml进行flash动态饼状图的制作

本文详细的介绍了FLASH饼状图的制作方法,手把手教会您. 效果有参考一下国外的饼图,不过他的代码,注释等我也看不懂,英文不懂,所以我就写个中文的好了.大家完全可以根据我的代码改出更多的效果来.编程水平有限,大家谅解一下,不过能正常运行. http://www.yes028.com/amu/ok.swf 增加了xml配置文件,可以直接修改xml文件以达到直接使用的目的. 默认数据来源为piedata.xml但是可以在页面中修改这个数据来源.如下:<object classid="clsid

PS千图成像制作过程解析

  本教材主要是向大家介绍PS千图成像制作过程,喜欢的朋友可以参考本教程制作思路,相信对大家有所帮助! 效果戳大看: 1.打开一个图,[窗口-动作],单击新建组1 2.单击, 记录 3.执行[图像-图像大小](不要点确定) 4.勾选"重订图像像素",先把较小边设置为50像素,确定 5执行[图像-画布大小]把另一边也设为50像素,确定 6.关闭图像,点[是]保存.结束动作记录 7.把要拼图的素材复制到一个新文件夹中 8.执行[文件-自动-批处理]把素材图改为规定大小 9.执行[文件-自动

XMind思维导图怎么制作关于手机品牌的关联图?

XMind思维导图怎么制作关于手机品牌的关联图?   1.双击XMind.exe打开软件,依次操作"新建---思维导图",如下图所示: 2.点击"思维导图"空白图,打开"选择风格"弹窗,这里选择"简洁"风格,如下图所示: 3.这时会创建一个空白画布编辑区域,其中中心部位显示一个"中心主题",如下图所示: 4.修改"中心主题"的描述,改为"手机"名称,如下图所示: 5.