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:
importnumpyasnp;
importpandasaspd;
importmatplotlib.pyplotasplt;
importxarrayasxrairtemps=xr.tutorial.open_dataset("air_temperature")
air=airtemps.air-273.15t=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 illustratetest=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()
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: