{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# Plotting Hurricane Track and Intensity Map\n\nThis example plots the hurricane tracks and intensity estimated from tc-tracker as well as the BestTrack data.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "from matplotlib import pyplot as plt\nfrom mpl_toolkits.basemap import Basemap\nimport numpy as np\nimport matplotlib.cm as cm\nimport matplotlib.colors as co\nimport matplotlib\n\n# Define map\nm = Basemap(projection='cyl', \\\n        llcrnrlat= 25, urcrnrlat= 40, \\\n        llcrnrlon= -100, urcrnrlon= -80, \\\n        resolution='l')\n\n# Define plot size\nfig, ax = plt.subplots(figsize=(8,8))\n\n# Read GFSv15p2 vortext tracker results\ncsv_file = \"GFSv15p2/fort.69\"\ntc = np.recfromcsv(csv_file, unpack=True, names=['stormid', 'count', 'initdate', 'constant', 'atcf', 'leadtime', 'lat','lon','ws','mslp','placehoder', 'thresh', 'neq', 'blank1', 'blank2', 'blank3','blank4','blank5','blank6','blank7'], dtype=None)\n\n# Read GFSv16beta vortext tracker results\ncsv_file2 = \"16beta/fort.69\"\ntc2 = np.recfromcsv(csv_file2, unpack=True, names=['stormid', 'count', 'initdate', 'constant', 'atcf', 'leadtime', 'lat','lon','ws','mslp','placehoder', 'thresh', 'neq', 'blank1', 'blank2', 'blank3','blank4','blank5','blank6','blank7'], dtype=None)\n\n# Read BestTrack data\nbal_file =\"BestTrack/bal022019_post.dat\"\nbal = np.recfromcsv(bal_file,unpack=True,delimiter=\",\",usecols=[0,2,6,7,8,9,10,11],names=['stormid','time','lat','lon','ws','mslp','intens','thresh'],dtype=None)\n\n# Initialize blank lists\nxs1 = []\nys1 = []\nxs2 = []\nys2 = []\n\nxs12 = []\nys12 = []\nxs22 = []\nys22 = []\n\ntclon =[]\ntclat=[]\nws=[]\nbxs1 = []\nbys1 = []\nballon=[]\nballat=[]\n\n# Prepare color map based on vortex center maximum wind speed   \ncmap=plt.cm.jet\nnorm=co.Normalize(vmin=9,vmax=55)\ncolors=plt.cm.ScalarMappable(norm,cmap)\ncol=colors.to_rgba(tc.ws)\nbcol=colors.to_rgba(bal.ws)\ncol2=colors.to_rgba(tc2.ws)\n\n# Read the vortex center, lat and lon, from BestTrack data  \nfor k in range(len(bal.lat)):\n    if bal.thresh[k] == 34 or bal.thresh[k] == 0:\n        ballon=float(bal.lon[k][1:5])*0.1*(-1)\n        ballat=float(bal.lat[k][1:4])*0.1\n        lonn,latt=ballon,ballat\n        xptt,yptt=m(lonn,latt)\n        lonptt,latptt=m(xptt,yptt,inverse=True)\n        bxs1.append(lonn)\n        bys1.append(latt)\ncs1=m.plot(bxs1, bys1, linestyle='--',color='Black',label='BestTrack')   \n\n# Read the vortex center, lat and lon, from BestTrack data to make colored dots along with the tracks  \nbxs1 = []\nbys1 = []\nballon=[]\nballat=[]\ncount=0\nfor k in range(len(bal.lat)):\n    if bal.thresh[k] == 34 or bal.thresh[k] == 0:\n        ballon=float(bal.lon[k][1:5])*0.1*(-1)\n        ballat=float(bal.lat[k][1:4])*0.1\n        lonn,latt=ballon,ballat\n        xptt,yptt=m(lonn,latt)\n        lonptt,latptt=m(xptt,yptt,inverse=True)\n        bxs1.append(lonn)\n        bys1.append(latt)\n        m.plot(bxs1[count], bys1[count], marker='o',color=bcol[k,:])\n        count=count+1                     \nencoding='utf-8'\n\n# Read the vortex center, lat and lon, from tc-tracker results for GFSv15p2   \nfor j in range(len(tc.ws)):\n    tcstormid=str(tc.stormid[j],encoding)\n    print(tcstormid)\n    if tcstormid=='AL' and tc.count[j]== 2 and tc.thresh[j]==34 and tc.leadtime[j]<=9000:\n        tclon=float(tc.lon[j][1:5])*0.1*(-1)\n        tclat=float(tc.lat[j][1:4])*0.1\n        lon, lat = tclon, tclat\n        xpt, ypt = m(lon, lat)\n        lonpt, latpt = m(xpt, ypt, inverse=True)\n        xs1.append(lon)\n        ys1.append(lat)  \ncs2=m.plot(xs1, ys1, linestyle='--',color='Red',label='UFSv1.0.0_15p2_hybedmf')\n\n# Read the vortex center, lat and lon, from tc-tracker results for GFSv15p2 to make colored dots along with the tracks  \nxs1 = []\nys1 = []\nxs2 = []\nys2 = []\ntclon =[]\ntclat=[]\ncount=0\nfor j in range(len(tc.ws)):\n    tcstormid=str(tc.stormid[j],encoding)\n    if tcstormid=='AL' and tc.count[j]==2 and tc.thresh[j]==34 and tc.leadtime[j]<=9000:\n        tclon=float(tc.lon[j][1:5])*0.1*(-1)\n        tclat=float(tc.lat[j][1:4])*0.1\n        lon, lat = tclon, tclat\n        xpt, ypt = m(lon, lat)\n        lonpt, latpt = m(xpt, ypt, inverse=True)\n        xs1.append(lon)\n        ys1.append(lat)\n        m.plot(xs1[count], ys1[count], marker='o',color=col[j,:])\n        count=count+1\n        print(count) \n\n# Read the vortex center, lat and lon, from tc-tracker results for GFSv16beta \nfor j in range(len(tc2.ws)):\n    tc2stormid=str(tc2.stormid[j],encoding)\n    print(tc2stormid)\n    if tc2stormid=='AL' and tc2.count[j]== 2 and tc2.thresh[j]==34 and tc2.leadtime[j]<=9000:\n        tc2lon=float(tc2.lon[j][1:5])*0.1*(-1)\n        tc2lat=float(tc2.lat[j][1:4])*0.1\n        lon2, lat2 = tc2lon, tc2lat\n        xpt2, ypt2 = m(lon2, lat2)\n        lonpt2, latpt2 = m(xpt2, ypt2, inverse=True)\n        xs12.append(lon2)\n        ys12.append(lat2)  \ncs22=m.plot(xs12, ys12, linestyle='--',color='Blue',label='UFSv1.0.0_16beta')\n\n# Read the vortex center, lat and lon, from tc-tracker results for GFSv16beta to make colored dots along with the tracks \nxs12 = []\nys12 = []\nxs22 = []\nys22 = []\ntc2lon =[]\ntc2lat=[]\ncount2=0\nfor j in range(len(tc2.ws)-1):\n    tc2stormid=str(tc2.stormid[j],encoding)\n    if tc2stormid=='AL' and tc2.count[j]==2 and tc2.thresh[j]==34 and tc2.leadtime[j]<=9000:\n        tc2lon=float(tc2.lon[j][1:5])*0.1*(-1)\n        tc2lat=float(tc2.lat[j][1:4])*0.1\n        lon2, lat2 = tc2lon, tc2lat\n        xpt2, ypt2 = m(lon2, lat2)\n        lonpt2, latpt2 = m(xpt2, ypt2, inverse=True)\n        xs12.append(lon2)\n        ys12.append(lat2)\n        m.plot(xs12[count2], ys12[count2], marker='o',color=col2[j,:])\n        count2=count2+1\n\n# Draw coastline\nm.drawcoastlines()\nm.drawcountries()\nm.drawstates()\nm.drawmapboundary(fill_color='#99ffff')\nm.fillcontinents(color='white',lake_color='#99ffff')\ncolors.set_array([])\n\n# Show and save the plot\nplt.legend()\nplt.title('Hurricane Barry Tracks from 00Z 11 Jul to 18Z 14 Jul 2019')\nplt.colorbar(colors,fraction=0.035,pad=0.04,label='vortex maximum 10-m wind (kt)')\nplt.show()\nplt.savefig('Tracker_Barry_ufsv1.png')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        ".. figure:: /auto_examples/images/thumb/sphx_glr_HurricanTrackIntensity_thumb.png\n :width: 600\n :align: center\n\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}