1D quiver plot – Surface currents – LOBO

Here we plot surface currents from the Satlantic LOBO ocean observatory moored in the North West Arm (Halifax, Nova Scotia, Canada). We used a 1D quiver plot… often used to represent magnitude and direction of currents at a particular location.

1D_quiver

import urllib2
import StringIO
import csv
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt

startdate = '20070518'
enddate   = '20070530'

# Read data from LOBO buoy
response = urllib2.urlopen('http://lobo.satlantic.com/cgi-data/nph-data.cgi?min_date='
                           +startdate+'&max_date='+enddate+'&y=current_across1,current_along1')
data = StringIO.StringIO(response.read())
r = csv.DictReader(data,dialect=csv.Sniffer().sniff(data.read(1000)))
data.seek(0)

# Break file into three lists
date, u, v = [],[],[]
for row in r:
    date.append(row['date [AST]'])
    u.append(row['current across channel [m/s]'])
    v.append(row['current along channel [m/s]'])

# Change the time strings into datetime objects
# ...and calculate 'decday' (i.e. "days from start")
datestart = datetime.strptime(date[1],"%Y-%m-%d %H:%M:%S")
DATE,decday = [],[]
for row in date:
    daterow = datetime.strptime(row,"%Y-%m-%d %H:%M:%S")
    DATE.append(daterow)
    decday.append((daterow-datestart).total_seconds()/(3600*24))

# Convert lists to numpy arrays
u = np.array(u, dtype=float)
v = np.array(v, dtype=float)

# Plot the output ************************************************************
# Plot quiver
fig1, (ax1, ax2) = plt.subplots(2,1)
magnitude = (u**2 + v**2)**0.5
maxmag = max(magnitude)
ax1.set_ylim(-maxmag, maxmag)
fill1 = ax1.fill_between(decday, magnitude, 0, color='k', alpha=0.1)

# Fake 'box' to be able to insert a legend for 'Magnitude'
p = ax1.add_patch(plt.Rectangle((1,1),1,1,fc='k',alpha=0.1))
leg1 = ax1.legend([p], ["Current magnitude [m/s]"],loc='lower right')
leg1._drawFrame=False

# 1D Quiver plot
q = ax1.quiver(decday,0,u,v,
               color='r',
               units='y',
               scale_units='y',
               scale = 1,
               headlength=1,
               headaxislength=1,
               width=0.004,
               alpha=0.5)
qk = plt.quiverkey(q,0.2, 0.05, 0.2,
               r'$0.2 \frac{m}{s}$',
               labelpos='W',
               fontproperties={'weight': 'bold'})

# Plot u and v components
ax1.axes.get_xaxis().set_visible(False)
ax1.set_xlim(0,max(decday)+0.5)
ax1.set_title("Current velocity from LOBO (Halifax, Canada)")
ax1.set_ylabel("Velocity (m/s)")
ax2.plot(decday, v, 'b-')
ax2.plot(decday, u, 'g-')
ax2.set_xlim(0,max(decday)+0.5)
ax2.set_xlabel("Days from start")
ax2.set_ylabel("Velocity (m/s)")
# Set legend location - See: http://matplotlib.org/users/legend_guide.html#legend-location
leg2 = plt.legend(['v','u'],loc='upper left')
leg2._drawFrame=False
plt.show()

# Save figure (without 'white' borders)
plt.savefig('1D_quiver.png', bbox_inches='tight')

1 thought on “1D quiver plot – Surface currents – LOBO

  1. Pingback: Day kind clicks in quiver piece|matplotlib | CodersDiscuss.com

Leave a comment