Whale distribution (OBIS SEAMAP)

Here we download and plot “humpback whale sightings” from the OBIS SEAMAP database.

whale_distribution

First, download the data as a .csv file. Then use following code:


import csv
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

# Open file
f = open('species_180530_points.csv', 'r')

# Read file
r = csv.DictReader(f)

# Initialize empty variables
lat, lon, num = [],[],[]

# Loop to parse data into our variables
errors = 0
for row in r:
    try: # The "Try/except" routine, prevents the loop to break if there is an empty field
        lat.append(float(row['latitude']))
        lon.append(float(row['longitude']))
        if not row['count'] == '':
            num.append(float(row['count']))
        else:
            num.append(1) # If "count" is empty, replace it with a 1
    except ValueError:
        errors = errors + 1 # Simple error counter

# Set up projection and limits
m1 = Basemap(projection='mill',llcrnrlat=-90,urcrnrlat=90,\
            llcrnrlon=-180,urcrnrlon=180,resolution='c')

# Given the projection, estimate plot coordinates from lats and lons
x,y = m1(lon, lat)

# Project data points into a grid
nbins = 200
H, xedges, yedges = np.histogram2d(x,y,bins=nbins,weights=num)

# Rotate and flip H...
H = np.rot90(H)
H = np.flipud(H)

# Mask zeros
Hmasked = np.ma.masked_where(H==0,H)

# Log H for better display
Hmasked = np.log10(Hmasked)

# Make map
fig1 = plt.figure()
cs = m1.pcolor(xedges,yedges,Hmasked,shading='flat')
m1.drawcoastlines()
m1.fillcontinents()
m1.drawmapboundary()
plt.title('Distribution of humpback whales')
cbar = plt.colorbar(orientation='horizontal', extend='both')
cbar.ax.set_xlabel('Number of whales')
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s