Xarray plot types#
Scott Wales, CLEX CMS
Let’s look at the different types of plots that are available using Xarray.
As usual we’ll start with some data from NCI
%matplotlib inline
import xarray
datapath = "http://dapds00.nci.org.au/thredds/dodsC/rr3/CMIP5/output1/CSIRO-BOM/ACCESS1-0/amip/mon/atmos/Amon/r1i1p1/latest/tas/tas_Amon_ACCESS1-0_amip_r1i1p1_197901-200812.nc"
data = xarray.open_dataset(datapath)
tas = data.tas.isel(time=0)
Calling .plot()
on a xarray dataarray is a quick way to make a plot. It will choose a plot type based on the array dimension - if you get a histogram try reducing the number of dimensions using .sel()
or .isel()
tas.plot()
<matplotlib.collections.QuadMesh at 0x7fb91828f240>
There are four basic plot types for 2d data
pcolormesh
- colourised imageimshow
- colourised imagecontourf
- filled contourscontour
- empty contours
pcolormesh
and imshow
are basically the same, but imshow has more control over the colours - you can for instance specify different arrays for the red, green and blue components
import matplotlib.pyplot as plt
ax={}
for i in range(4):
ax[i] = plt.subplot(2,2,i+1)
tas.plot.pcolormesh(ax=ax[0])
tas.plot.imshow(ax=ax[1])
tas.plot.contourf(ax=ax[2])
tas.plot.contour(ax=ax[3])
<matplotlib.contour.QuadContourSet at 0x7fb918102ef0>
By default the plots come with a colour bar and title, however you can disable those in order to replace them with your own
tas.plot.pcolormesh(levels=7, add_colorbar=True, add_labels=False)
plt.suptitle("Surface Temperature (K)")
plt.tick_params(bottom=False, labelbottom=False, left=False, labelleft=False)
You can also specify the axis to create a plot on, which is useful for subplots and cartopy projections.
Note that while pyplot’s imshow()
function only shows a rectangular image cartopy’s projections still work to project the data onto a globe
import cartopy.crs as ccrs
ax = [
plt.subplot(121, projection=ccrs.Orthographic()),
plt.subplot(122, projection=ccrs.Orthographic(central_longitude=90)),
]
ax[0].set_title('pcolormesh')
tas.plot.pcolormesh(ax=ax[0], transform=ccrs.PlateCarree(), add_colorbar=False, add_labels=False)
ax[0].coastlines()
ax[1].set_title('imshow')
tas.plot.imshow(ax=ax[1], transform=ccrs.PlateCarree(), add_colorbar=False, add_labels=False)
ax[1].coastlines()
<cartopy.mpl.feature_artist.FeatureArtist at 0x7fb901d736a0>