亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python繪圖實現臺風路徑可視化

發布時間:2020-10-26 15:12:56 來源:億速云 閱讀:296 作者:Leah 欄目:開發技術

使用Python繪圖實現臺風路徑可視化?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

臺風路徑的獲取

中國氣象局(CMA)

中國氣象局(CMA)的臺風最佳路徑數據集(BST),BST是之后對歷史臺風路徑進行校正后發布的,其經緯度、強度、氣壓具有更高的可靠性,但是時間分辨率為6小時,部分3小時,這一點不如觀測數據

導入模塊并讀取數據,使用BST的2018年臺風路徑數據作為示例,已經將原始的txt文件轉換為xls文件。

import os, glob
import pandas as pd
import numpy as np
import shapely.geometry as sgeom
import matplotlib.pyplot as plt
from matplotlib.image import imread
from matplotlib.animation import FuncAnimation
import matplotlib.lines as mlines
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
import cartopy.io.shapereader as shpreader
import cartopy.io.img_tiles as cimgt
from PIL import Image
import warnings 
warnings.filterwarnings('ignore')
df = pd.read_csv('./2018typhoon.csv')

定義等級色標

def get_color(level):
  global color
  if level == '熱帶低壓' or level == '熱帶擾動':
    color='#FFFF00'
  elif level == '熱帶風暴':
    color='#6495ED'
  elif level == '強熱帶風暴':
    color='#3CB371'
  elif level == '臺風':
    color='#FFA500'
  elif level == '強臺風':
    color='#FF00FF'
  elif level == '超強臺風':
    color='#DC143C'
  return color

定義底圖函數

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

定義繪制單個臺風路徑方法,并繪制2018年第18號臺風溫比亞。

def draw_single(df):
  ax = create_map(df['名字'].iloc[0], [110, 135, 20, 45])
  for i in range(len(df)):
    ax.scatter(list(df['經度'])[i], list(df['緯度'])[i], marker='o', s=20, color=get_color(list(df['強度'])[i]))

  for i in range(len(df)-1):
    pointA = list(df['經度'])[i],list(df['緯度'])[i]
    pointB = list(df['經度'])[i+1],list(df['緯度'])[i+1]
    ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(list(df['強度'])[i+1]),crs=ccrs.PlateCarree())
  plt.savefig('./typhoon_one.png')
draw_single(df[df['編號']==1818])

使用Python繪圖實現臺風路徑可視化

定義繪制多個臺風路徑方法,并繪制2018年全年的全部臺風路徑。

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['經度'])[i],list(df1['緯度'])[i]
      pointB = list(df1['經度'])[i+1],list(df1['緯度'])[i+1]
      ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(list(df1['強度'])[i+1]),crs=ccrs.PlateCarree())
  plt.savefig('./typhoon_multi.png')
draw_multi(df)

使用Python繪圖實現臺風路徑可視化

定義繪制單個臺風gif路徑演變方法,并繪制2018年第18號臺風的gif路徑圖。

def draw_single_gif(df):
  for state in range(len(df.index))[:]:
    ax = create_map(f'{df["名字"].iloc[0]} {df["時間"].iloc[state]}', [110, 135, 20, 45])
    for i in range(len(df[:state])):
      ax.scatter(df['經度'].iloc[i], df['緯度'].iloc[i], marker='o', s=20, color=get_color(df['強度'].iloc[i]))
    for i in range(len(df[:state])-1):
      pointA = df['經度'].iloc[i],df['緯度'].iloc[i]
      pointB = df['經度'].iloc[i+1],df['緯度'].iloc[i+1]
      ax.add_geometries([sgeom.LineString([pointA, pointB])], color=get_color(df['強度'].iloc[i+1]),crs=ccrs.PlateCarree())
    print(f'正在繪制第{state}張軌跡圖')
    plt.savefig(f'./{df["名字"].iloc[0]}{str(state).zfill(3)}.png', bbox_inches='tight')
  # 將圖片拼接成動畫
  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繪圖實現臺風路徑可視化

看完上述內容,你們掌握使用Python繪圖實現臺風路徑可視化的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝阳县| 吉水县| 恩平市| 通城县| 玉门市| 红原县| 太康县| 天津市| 毕节市| 台中县| 城口县| 耒阳市| 札达县| 金堂县| 连城县| 平顺县| 谷城县| 错那县| 郎溪县| 玉田县| 遂昌县| 桃园市| 兰溪市| 巴里| 大埔县| 峡江县| 宜宾市| 永和县| 大竹县| 泸水县| 双城市| 彩票| 威信县| 嫩江县| 灵丘县| 黎川县| 长宁县| 新巴尔虎左旗| 荔波县| 光泽县| 苏尼特右旗|