Description
Faceted plots are a great feature of xarray, in my view, sometimes presented as a 'quick and dirty' way to plot data, while it could be instead the best way to produce high quality subplot panels without any tedious loop on matplotlib axes.
I have been struggling to understand how map and map_dataarray methods work to overlay, e.g. hatching or stippling to 2D faceted plots derived from xr.plot.pcolormesh or xr.plot.imshow . This is very useful to highlight values labelled as True after passing a statistical test for example.
I found a way to go with the map_dataarray method (Note that I have never succeeded in using the map method for datasets. I do not understand how it works).
Below, I propose an example based on the official documentation. Feel free to use it or adapt it to improve the Xarray documentation:
import numpy as np;
import pandas as pd;
import matplotlib.pyplot as plt;
import xarray as xr
airtemps = xr.tutorial.open_dataset("air_temperature")
air = airtemps.air - 273.15
t = air.isel(time=slice(0, 365 * 4, 250))
warm = t>15 #Suppose we want to hatch regions with temperature warmer than 15°C. Quite a dumb idea but this is just to illustrate
test = xr.concat([t,warm],dim='dummy')
g_simple = test.isel(dummy=0).plot(x="lon", y="lat", col="time", col_wrap=3)
g_simple.data = test.isel(dummy=1) #Here I just replace the temperature data of the FacetGrid object with the boolean data
g_simple.map_dataarray(xr.plot.contourf,x='lon',y='lat', levels=3, hatches=[ '' , '////' ], alpha=0, add_colorbar=False)
plt.show()