av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例

瀏覽:2日期:2022-07-07 13:15:50

臺風(fēng)是重大災(zāi)害性天氣,臺風(fēng)引起的直接災(zāi)害通常由三方面造成,狂風(fēng)、暴雨、風(fēng)暴潮,除此以外臺風(fēng)的這些災(zāi)害極易誘發(fā)城市內(nèi)澇、房屋倒塌、山洪、泥石流等次生災(zāi)害。正因如此,臺風(fēng)在科研和業(yè)務(wù)工作中是研究的重點(diǎn)。希望這次臺風(fēng)路徑可視化可以給予大家一點(diǎn)點(diǎn)幫助。

臺風(fēng)路徑的獲取

中國氣象局(CMA)

中國氣象局(CMA)的臺風(fēng)最佳路徑數(shù)據(jù)集(BST),BST是之后對歷史臺風(fēng)路徑進(jìn)行校正后發(fā)布的,其經(jīng)緯度、強(qiáng)度、氣壓具有更高的可靠性,但是時(shí)間分辨率為6小時(shí),部分3小時(shí),這一點(diǎn)不如觀測數(shù)據(jù)。下載地址:

http://tcdata.typhoon.org.cn/

溫州臺風(fēng)網(wǎng)

溫州臺風(fēng)網(wǎng)的數(shù)據(jù)是實(shí)時(shí)發(fā)布數(shù)據(jù)的記錄,時(shí)間分辨率最高達(dá)1小時(shí),對于臺風(fēng)軌跡具有更加精細(xì)化的表述。下載地址:

http://www.wztf121.com/

示例

導(dǎo)入模塊并讀取數(shù)據(jù),使用BST的2018年臺風(fēng)路徑數(shù)據(jù)作為示例,已經(jīng)將原始的txt文件轉(zhuǎn)換為xls文件。

import os, globimport pandas as pdimport numpy as npimport shapely.geometry as sgeomimport matplotlib.pyplot as pltfrom matplotlib.image import imreadfrom matplotlib.animation import FuncAnimationimport matplotlib.lines as mlinesimport cartopy.crs as ccrsimport cartopy.feature as cfeatfrom cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatterimport cartopy.io.shapereader as shpreaderimport cartopy.io.img_tiles as cimgtfrom PIL import Imageimport warnings warnings.filterwarnings(’ignore’)df = pd.read_csv(’./2018typhoon.csv’)

定義等級色標(biāo)

def get_color(level): global color if level == ’熱帶低壓’ or level == ’熱帶擾動(dòng)’: color=’#FFFF00’ elif level == ’熱帶風(fēng)暴’: color=’#6495ED’ elif level == ’強(qiáng)熱帶風(fēng)暴’: color=’#3CB371’ elif level == ’臺風(fēng)’: color=’#FFA500’ elif level == ’強(qiáng)臺風(fēng)’: color=’#FF00FF’ elif level == ’超強(qiáng)臺風(fēng)’: color=’#DC143C’ return color

定義底圖函數(shù)

def create_map(title, extent): fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree()) url = ’http://map1c.vis.earthdata.nasa.gov/wmts-geo/wmts.cgi’ layer = ’BlueMarble_ShadedRelief’ ax.add_wmts(url, layer) ax.set_extent(extent,crs=ccrs.PlateCarree()) gl = ax.gridlines(draw_labels=False, linewidth=1, color=’k’, alpha=0.5, linestyle=’--’) gl.xlabels_top = gl.ylabels_right = False ax.set_xticks(np.arange(extent[0], extent[1]+5, 5)) ax.set_yticks(np.arange(extent[2], extent[3]+5, 5)) ax.xaxis.set_major_formatter(LongitudeFormatter()) ax.xaxis.set_minor_locator(plt.MultipleLocator(1)) ax.yaxis.set_major_formatter(LatitudeFormatter()) ax.yaxis.set_minor_locator(plt.MultipleLocator(1)) ax.tick_params(axis=’both’, labelsize=10, direction=’out’) a = mlines.Line2D([],[],color=’#FFFF00’,marker=’o’,markersize=7, label=’TD’,ls=’’) b = mlines.Line2D([],[],color=’#6495ED’, marker=’o’,markersize=7, label=’TS’,ls=’’) c = mlines.Line2D([],[],color=’#3CB371’, marker=’o’,markersize=7, label=’STS’,ls=’’) d = mlines.Line2D([],[],color=’#FFA500’, marker=’o’,markersize=7, label=’TY’,ls=’’) e = mlines.Line2D([],[],color=’#FF00FF’, marker=’o’,markersize=7, label=’STY’,ls=’’) f = mlines.Line2D([],[],color=’#DC143C’, marker=’o’,markersize=7, label=’SSTY’,ls=’’) ax.legend(handles=[a,b,c,d,e,f], numpoints=1, handletextpad=0, loc=’upper left’, shadow=True) plt.title(f’{title} Typhoon Track’, fontsize=15) return ax

定義繪制單個(gè)臺風(fēng)路徑方法,并繪制2018年第18號臺風(fēng)溫比亞。

def draw_single(df): ax = create_map(df[’名字’].iloc[0], [110, 135, 20, 45]) for i in range(len(df)): ax.scatter(list(df[’經(jīng)度’])[i], list(df[’緯度’])[i], marker=’o’, s=20, color=get_color(list(df[’強(qiáng)度’])[i])) for i in range(len(df)-1): pointA = list(df[’經(jīng)度’])[i],list(df[’緯度’])[i] pointB = list(df[’經(jīng)度’])[i+1],list(df[’緯度’])[i+1] ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(list(df[’強(qiáng)度’])[i+1]),crs=ccrs.PlateCarree()) plt.savefig(’./typhoon_one.png’)draw_single(df[df[’編號’]==1818])

Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例

定義繪制多個(gè)臺風(fēng)路徑方法,并繪制2018年全年的全部臺風(fēng)路徑。

def draw_multi(df): L = list(set(df[’編號’])) L.sort(key=list(df[’編號’]).index) ax = create_map(’2018’, [100, 180, 0, 45]) for number in L: df1 = df[df[’編號’]==number] for i in range(len(df1)-1): pointA = list(df1[’經(jīng)度’])[i],list(df1[’緯度’])[i] pointB = list(df1[’經(jīng)度’])[i+1],list(df1[’緯度’])[i+1] ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(list(df1[’強(qiáng)度’])[i+1]),crs=ccrs.PlateCarree()) plt.savefig(’./typhoon_multi.png’)draw_multi(df)

Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例

定義繪制單個(gè)臺風(fēng)gif路徑演變方法,并繪制2018年第18號臺風(fēng)的gif路徑圖。

def draw_single_gif(df): for state in range(len(df.index))[:]: ax = create_map(f’{df['名字'].iloc[0]} {df['時(shí)間'].iloc[state]}’, [110, 135, 20, 45]) for i in range(len(df[:state])): ax.scatter(df[’經(jīng)度’].iloc[i], df[’緯度’].iloc[i], marker=’o’, s=20, color=get_color(df[’強(qiáng)度’].iloc[i])) for i in range(len(df[:state])-1): pointA = df[’經(jīng)度’].iloc[i],df[’緯度’].iloc[i] pointB = df[’經(jīng)度’].iloc[i+1],df[’緯度’].iloc[i+1] ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(df[’強(qiáng)度’].iloc[i+1]),crs=ccrs.PlateCarree()) print(f’正在繪制第{state}張軌跡圖’) plt.savefig(f’./{df['名字'].iloc[0]}{str(state).zfill(3)}.png’, bbox_inches=’tight’) # 將圖片拼接成動(dòng)畫 imgFiles = list(glob.glob(f’./{df['名字'].iloc[0]}*.png’)) images = [Image.open(fn) for fn in imgFiles] im = images[0] filename = f’./track_{df['名字'].iloc[0]}.gif’ im.save(fp=filename, format=’gif’, save_all=True, append_images=images[1:], duration=500)draw_single_gif(df[df[’編號’]==1818])

Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 成人在线播放网站 | 免费小视频在线观看 | 97国产精品视频人人做人人爱 | 久久精品国产99国产 | 精品成人在线视频 | 亚洲a在线观看 | 日本天堂一区 | 中文字幕 在线观看 | 久久久.com| 夜夜操操操 | 99久久精品国产一区二区三区 | 日韩一级精品视频在线观看 | 中文字幕 在线观看 | 男人的天堂在线视频 | 日本激情一区二区 | 国产一级片免费在线观看 | 91精品国产乱码久久久久久 | 亚洲精品99999 | 91精品国产麻豆 | 日韩一区中文字幕 | 国产精品免费一区二区三区四区 | 国产在线精品一区二区三区 | 久久国产精品一区二区三区 | 欧美日韩一区在线播放 | 成人美女免费网站视频 | 一级黄色片一级黄色片 | 91原创视频 | 日韩高清av| 一区二区在线不卡 | 一区二区三区在线电影 | 久久久久久久久久久91 | 成人久久网 | 久久i| 婷婷毛片| 一级黄色av电影 | 国产性生活一级片 | 在线观看日本网站 | 久久精品伊人 | 在线精品一区二区三区 | 欧美色综合天天久久综合精品 | 国产免费视频在线 |