Iris Vector Plot


In [1]:
import numpy as np

import matplotlib.pyplot as plt

import cartopy.crs as ccrs
import iris
from iris.coord_systems import GeogCS
from iris.cube import Cube

In [2]:
def create_random_wind_data(size):
    # Create some random wind data
    def random_dat(size):
        return (np.random.random_sample(size)*2-1)*10

    # Coord system
    cs = GeogCS(6371229)

    # Coordinates
    lat_coord = iris.coords.DimCoord(
        points=np.linspace(45, 60, size[0], endpoint=True),
        standard_name='latitude',
        units='degrees',
        coord_system=cs)

    lon_coord = iris.coords.DimCoord(
        points=np.linspace(-10, 5, size[1], endpoint=True),
        standard_name='longitude',
        units='degrees',
        coord_system=cs)

    # U-wind cube
    u_cube = Cube(random_dat(size),
                  standard_name='eastward_wind',
                  units='m s-1')

    u_cube.add_dim_coord(lat_coord, 0)
    u_cube.add_dim_coord(lon_coord, 1)

    # V-wind cube
    v_cube = Cube(random_dat(size),
                  standard_name='northward_wind',
                  units='m s-1')

    v_cube.add_dim_coord(lat_coord, 0)
    v_cube.add_dim_coord(lon_coord, 1)

    return (u_cube, v_cube)

In [3]:
if __name__ == '__main__':
    u_cube, v_cube = create_random_wind_data(size=(25, 25))

    # Quiver plot
    U = u_cube.data
    V = v_cube.data
    X = u_cube.coord('longitude').points
    Y = v_cube.coord('latitude').points

    figure(figsize=(8,8))
    ax = plt.axes(projection=ccrs.PlateCarree())
    arrows = plt.quiver(X, Y, U, V, units='xy', headwidth=2,
                        transform=ccrs.Geodetic())
    ax.coastlines()
    ax.gridlines(draw_labels=True)
    ax.stock_img()
    ax.set_xlim(-10, 5)
    ax.set_ylim(45, 60)

    plt.show()