Created
September 3, 2018 05:16
-
-
Save duartecosta1/53c51733bf26bad7984edbbfa56179be to your computer and use it in GitHub Desktop.
Make a comparative panel plot between model, observational dataset and difference from both
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import xarray as xr | |
| import matplotlib.pyplot as plt | |
| import os | |
| from mpl_toolkits.basemap import Basemap | |
| from matplotlib.colors import BoundaryNorm | |
| from matplotlib.colors import LinearSegmentedColormap | |
| import numpy as np | |
| runame = 'SAmerica_CORDEX_Noah-MP' | |
| varib = ('SST', 'T2', 'PSFC') | |
| var = str(varib[1]) | |
| v = str(varib[1]) | |
| path = '/g/data3/w97/dc8106/WRF_runs/Era-Interim/VALIDATION/' | |
| wrf = path+var+'/SAmerica_CORDEX_Noah-MP_T2_sept2012.nc' | |
| #wrf = path+var+'/wrfout_1hourly_11sep2012.nc' | |
| obs = path+'Erai-variables/tas_ERAI_sept2012_SAmerica.nc' | |
| diff = path+var+'/T2_diff_sept2012_rightint.nc' | |
| w = xr.open_dataset(wrf) | |
| o = xr.open_dataset(obs) | |
| d = xr.open_dataset(diff) | |
| #T2 | |
| wT2 = w.T2[20:].squeeze() | |
| oT2 = o.tas | |
| dT2 = d.T2 | |
| lats = w.XLAT | |
| lons = w.XLONG | |
| date = w.XTIME | |
| olats = o.lat | |
| olons = o.lon | |
| panel_titles = ('WRF','Erai-Interim','Diff') | |
| ylabel = ('00h UTC','06h UTC','12h UTC','18h UTC') | |
| custom_cmap = LinearSegmentedColormap.from_list(name='custom_div_cmap', colors=[(0,0,1), (0.5,0.5,1), 'White', 'White', (1,0.5,0.5), (1,0,0)], N = 21) | |
| tot_levels=11 | |
| #for i in range(0,8,4): | |
| fig, ax = plt.subplots(4,3, figsize=(10,10)) | |
| ax = ax.flatten() | |
| #WRF | |
| vmin=273 | |
| vmax=313 | |
| levels = list(np.linspace(vmin,vmax,tot_levels)) | |
| custom_cmap = plt.get_cmap('Spectral_r') | |
| norm = BoundaryNorm(levels, ncolors=custom_cmap.N, clip=True) | |
| i=0 | |
| date_title=str(date.values[0+i])[:10] | |
| plt.suptitle(date_title +' '+runame, fontsize=16) | |
| #Model output maps (WRF) | |
| ax[0].set_ylabel(ylabel[0]) | |
| m0 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[0]) | |
| m0.drawmapboundary(fill_color='white') | |
| m0.drawcountries(linewidth=0.25) | |
| m0.drawcoastlines(linewidth=1) | |
| h0 = m0.pcolormesh(lons,lats,w.T2[0+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[3].set_ylabel(ylabel[1]) | |
| m3 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[3]) | |
| m3.drawmapboundary(fill_color='white') | |
| m3.drawcountries(linewidth=0.25) | |
| m3.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m3.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m3.drawcoastlines(linewidth=1) | |
| h3 = m3.pcolormesh(lons,lats,w.T2[1+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[6].set_ylabel(ylabel[2]) | |
| m6 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[6]) | |
| m6.drawmapboundary(fill_color='white') | |
| m6.drawcountries(linewidth=0.25) | |
| m6.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m6.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m6.drawcoastlines(linewidth=1) | |
| h6 = m6.pcolormesh(lons,lats,w.T2[2+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[9].set_ylabel(ylabel[3]) | |
| m9 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[9]) | |
| m9.drawmapboundary(fill_color='white') | |
| m9.drawcountries(linewidth=0.25) | |
| m9.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m9.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m9.drawcoastlines(linewidth=1) | |
| h9 = m9.pcolormesh(lons,lats,w.T2[3+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| #Obs maps (Era-Interim) | |
| ax[1].set_ylabel(ylabel[0]) | |
| m1 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[1]) | |
| m1.drawmapboundary(fill_color='white') | |
| m1.drawcountries(linewidth=0.25) | |
| m1.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m1.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m1.drawcoastlines(linewidth=1) | |
| h1 = m1.pcolormesh(olons,olats,oT2[0+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[4].set_ylabel(ylabel[1]) | |
| m4 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[4]) | |
| m4.drawmapboundary(fill_color='white') | |
| m4.drawcountries(linewidth=0.25) | |
| m4.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m4.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m4.drawcoastlines(linewidth=1) | |
| h4 = m4.pcolormesh(olons,olats,oT2[1+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[7].set_ylabel(ylabel[2]) | |
| m7 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[7]) | |
| m7.drawmapboundary(fill_color='white') | |
| m7.drawcountries(linewidth=0.25) | |
| m7.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m7.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m7.drawcoastlines(linewidth=1) | |
| h7 = m7.pcolormesh(olons,olats,oT2[2+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[10].set_ylabel(ylabel[3]) | |
| m10 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[10]) | |
| m10.drawmapboundary(fill_color='white') | |
| m10.drawcountries(linewidth=0.25) | |
| m10.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m10.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m10.drawcoastlines(linewidth=1) | |
| h10 = m10.pcolormesh(olons,olats,oT2[3+i], cmap=custom_cmap, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| cax = plt.axes([0.1, 0.05, 0.46, 0.02]) #left top width height | |
| cbar = plt.colorbar(h0, cax=cax, orientation='horizontal') | |
| cbar.set_label(wT2.units) | |
| cbar.set_ticks(np.linspace(vmin,vmax,tot_levels)) | |
| #Diff maps | |
| vmin = -10 | |
| vmax = 10 | |
| levels2 = list(np.linspace(vmin,vmax,tot_levels)) | |
| custom_cmap2 = plt.get_cmap('bwr') | |
| #custom_cmap2 = LinearSegmentedColormap.from_list(name='custom_div_cmap', colors=[(0,0,1), (0.5,0.5,1), 'White', 'White', (1,0.5,0.5), (1,0,0)], N = tot_levels) | |
| norm = BoundaryNorm(levels2, ncolors=custom_cmap2.N, clip=True) | |
| ax[2].set_ylabel(ylabel[0]) | |
| m2 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[2]) | |
| m2.drawmapboundary(fill_color='white') | |
| m2.drawcountries(linewidth=0.25) | |
| m2.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m2.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m2.drawcoastlines(linewidth=1) | |
| h2 = m2.pcolormesh(olons,olats,dT2[0+i], cmap=custom_cmap2, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[5].set_ylabel(ylabel[1]) | |
| m5 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[5]) | |
| m5.drawmapboundary(fill_color='white') | |
| m5.drawcountries(linewidth=0.25) | |
| m5.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m5.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m5.drawcoastlines(linewidth=1) | |
| h5 = m5.pcolormesh(olons,olats,dT2[1+i], cmap=custom_cmap2, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[8].set_ylabel(ylabel[2]) | |
| m8 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[8]) | |
| m8.drawmapboundary(fill_color='white') | |
| m8.drawcountries(linewidth=0.25) | |
| m8.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m8.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m8.drawcoastlines(linewidth=1) | |
| h8 = m8.pcolormesh(olons,olats,dT2[2+i], cmap=custom_cmap2, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[11].set_ylabel(ylabel[3]) | |
| m11 = Basemap(projection='cyl',llcrnrlat=-60.,urcrnrlat=20.,llcrnrlon=-90.,urcrnrlon=-20., lon_0=0, resolution='i', ax=ax[11]) | |
| m11.drawmapboundary(fill_color='white') | |
| m11.drawcountries(linewidth=0.25) | |
| m11.drawparallels(np.arange(-90., 99., 30.), zorder=0, color='k') | |
| m11.drawmeridians(np.arange(-180., 180., 60.), zorder=0, color='k') | |
| m11.drawcoastlines(linewidth=1) | |
| h11 = m11.pcolormesh(olons,olats,dT2[3+i], cmap=custom_cmap2, latlon=True, vmin=vmin, vmax=vmax, norm=norm) | |
| ax[0].set_title(panel_titles[0]) | |
| ax[1].set_title(panel_titles[1]) | |
| ax[2].set_title(panel_titles[2]) | |
| #Cbar for absolute temp values (model and obs) | |
| cax2 = plt.axes([0.7, 0.05, 0.22, 0.02]) #left top width height | |
| cbar2 = plt.colorbar(h2, cax=cax2, orientation='horizontal') | |
| cbar2.set_label(dT2.units) | |
| cbar2.set_ticks(np.linspace(vmin,vmax,tot_levels)) | |
| plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment