最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年10月23日 09:52:46   作者:松鼠愛吃餅干  
這篇文章主要介紹了Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

臺風(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, 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')

定義等級色標(biāo)

def get_color(level):
  global color
  if level == '熱帶低壓' or level == '熱帶擾動':
    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])

定義繪制多個(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)

定義繪制單個(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')
  # 將圖片拼接成動畫
  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])

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

相關(guān)文章

  • python實(shí)現(xiàn)根據(jù)用戶輸入從電影網(wǎng)站獲取影片信息的方法

    python實(shí)現(xiàn)根據(jù)用戶輸入從電影網(wǎng)站獲取影片信息的方法

    這篇文章主要介紹了python實(shí)現(xiàn)根據(jù)用戶輸入從電影網(wǎng)站獲取影片信息的方法,涉及Python正則表達(dá)式抓取網(wǎng)頁的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)

    老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)

    下面小編就為大家?guī)硪黄仙U刾ython函數(shù)參數(shù)的區(qū)別(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 3分鐘看懂Python后端必須知道的Django的信號機(jī)制

    3分鐘看懂Python后端必須知道的Django的信號機(jī)制

    這篇文章主要介紹了3分鐘看懂Python后端必須知道的Django的信號機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python函數(shù)的默認(rèn)參數(shù)請勿定義可變類型詳解

    python函數(shù)的默認(rèn)參數(shù)請勿定義可變類型詳解

    這篇文章主要介紹了python函數(shù)的默認(rèn)參數(shù)請勿定義可變類型詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • pycharm自動生成文件注釋和函數(shù)注釋

    pycharm自動生成文件注釋和函數(shù)注釋

    這篇文章主要介紹了pycharm自動生成文件注釋和函數(shù)注釋的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • python中私有函數(shù)調(diào)用方法解密

    python中私有函數(shù)調(diào)用方法解密

    這篇文章主要介紹了python中私有函數(shù)調(diào)用方法,較為詳細(xì)的分析了Python私有函數(shù)的原理與調(diào)用技巧,需要的朋友可以參考下
    2016-04-04
  • python字典中g(shù)et()函數(shù)的基本用法實(shí)例

    python字典中g(shù)et()函數(shù)的基本用法實(shí)例

    在字典內(nèi)置的方法中,想說的方法為get,這個(gè)方法是通過鍵來獲取相應(yīng)的值,但是如果相應(yīng)的鍵不存在則返回None,這篇文章主要給大家介紹了關(guān)于python字典中g(shù)et()函數(shù)的基本用法,需要的朋友可以參考下
    2022-03-03
  • python模擬表單提交登錄圖書館

    python模擬表單提交登錄圖書館

    這篇文章主要為大家詳細(xì)介紹了python模擬表單提交登錄圖書館的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 在Django的模型中執(zhí)行原始SQL查詢的方法

    在Django的模型中執(zhí)行原始SQL查詢的方法

    這篇文章主要介紹了在Django的模型中執(zhí)行原始SQL查詢的方法,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Python關(guān)鍵字?asynico基本用法

    Python關(guān)鍵字?asynico基本用法

    asyncio是Python的異步編程庫,用于編寫并發(fā)程序,它提供了一組基于協(xié)程的工具,可以幫助你實(shí)現(xiàn)異步網(wǎng)絡(luò)通信、并發(fā)計(jì)算等任務(wù),這篇文章主要介紹了Python關(guān)鍵字?asynico,需要的朋友可以參考下
    2023-01-01

最新評論

旬邑县| 都江堰市| 顺昌县| 临桂县| 曲麻莱县| 临湘市| 定南县| 靖宇县| 杭锦旗| 法库县| 丹棱县| 桦南县| 阿坝| 沧源| 吉水县| 楚雄市| 东乡县| 简阳市| 论坛| 梁平县| 贵定县| 威信县| 北川| 永吉县| 龙井市| 阿城市| 喀喇沁旗| 阜宁县| 宜宾市| 江永县| 连州市| 左贡县| 宾川县| 绵阳市| 垫江县| 镇赉县| 大渡口区| 高尔夫| 宁阳县| 湘乡市| 东辽县|