Search code examples
pythonmatplotlibsubplotcartopy

Cannot plot contourf subplots using matplotlib and cartopy in python


I am trying to plot 2 figures from NetCDF files after analysis into subplots, I could plot individually but cannot plot as subplots. There are no errors shown but figure not coming properly.

import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np
import cartopy.mpl.ticker as cticker

#%% OLR Import
fname ='/home/SIMS/P1/*.nc'                                              
ds = xr.open_mfdataset(fname)

olr = ds.olr
mea = ds.mean('time')

# OLR daily data import
cname ='/home/SIMS/olrr/OLR.nc'
dc = xr.open_dataset(cname)
colr = dc.olr

# calculating JJAS climatology 
def is_jjas(month):
    return (month >= 6) & (month <= 9)

seasonal_data_olr = colr.sel(time=is_jjas(colr['time.month']))
climatology = seasonal_data_olr.mean('time')
# Anomaly
anomaly_olr=mea-climatology



fig = plt.figure()
ax = plt.axes(projection=ccrs.Mercator(central_longitude=80.0, min_latitude=-10.0, max_latitude=20.0, globe=None, latitude_true_scale=0.0))
plt.subplot(2,1,1)
climatology.plot.contourf(ax=ax,transform=ccrs.PlateCarree(),vmin=0, vmax=245)
plt.subplot(2,1,2)
anomaly_olr.olr.plot.contourf(ax=ax, transform=ccrs.PlateCarree(),cmap="jet", vmin=-30, vmax=30)
plt.show()

my variables

climatology

xarray.DataArray 'olr' (lat: 15, lon: 73)

anomaly_olr.olr

xarray.DataArray 'olr' (lat: 15, lon: 73)

it gives this figure without contourf

it gives this figure without contourf


Solution

  • After making few changes I could plot it well. I changed few lines as follows,

    plt.figure(figsize=(8, 10))
    ax1 = plt.subplot(2,1,1, projection=ccrs.Mercator(central_longitude=80.0, min_latitude=-10.0, max_latitude=20.0, globe=None, latitude_true_scale=0.0))
    anomaly_olr.olr.plot.contourf(ax=ax1, transform=ccrs.PlateCarree(),cmap="jet", vmin=-30, vmax=30)
    
    ax2 = plt.subplot(2,1,2, projection=ccrs.Mercator(central_longitude=80.0, min_latitude=-10.0, max_latitude=20.0, globe=None, latitude_true_scale=0.0))
    climatology.plot.contourf(ax=ax2,transform=ccrs.PlateCarree(),vmin=0, vmax=245)
    plt.show()
    

    Thanks anyway