def main(): if not img_folder.is_dir(): img_folder.mkdir(parents=True) season_to_months = OrderedDict([ ("Winter (DJF)", (1, 2, 12)), ("Spring (MAM)", range(3, 6)), ("Summer (JJA)", range(6, 9)), ("Fall (SON)", range(9, 12)), ]) varnames = ["TT", "PR"] plot_utils.apply_plot_params(font_size=10, width_pt=None, width_cm=20, height_cm=17) # reanalysis_driven_config = RunConfig(data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl.hdf5", # start_year=1980, end_year=2010, label="ERAI-CRCM5-L") # reanalysis_driven_config = RunConfig(data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.4_crcm5-hcd-rl.hdf5", start_year=1980, end_year=2010, label="ERAI-CRCM5-L(0.4)") nx_agg_model = 1 ny_agg_model = 1 nx_agg_anusplin = 4 ny_agg_anusplin = 4 gcm_driven_config = RunConfig( data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/cc-canesm2-driven/quebec_0.1_crcm5-hcd-rl-cc-canesm2-1980-2010.hdf5", start_year=1980, end_year=2010, label="CanESM2-CRCM5-L") bmp_info = analysis.get_basemap_info(r_config=reanalysis_driven_config) xx, yy = bmp_info.get_proj_xy() field_cmap = cm.get_cmap("jet", 10) vname_to_clevels = { "TT": np.arange(-30, 32, 2), "PR": np.arange(0, 6.5, 0.5) } vname_to_anusplin_path = { "TT": "/home/huziy/skynet3_rech1/anusplin_links", "PR": "/home/huziy/skynet3_rech1/anusplin_links" } vname_to_cru_path = { "TT": "/HOME/data/Validation/CRU_TS_3.1/Original_files_gzipped/cru_ts_3_10.1901.2009.tmp.dat.nc", "PR": "/HOME/data/Validation/CRU_TS_3.1/Original_files_gzipped/cru_ts_3_10.1901.2009.pre.dat.nc" } for vname in varnames: fig = plt.figure() ncols = len(season_to_months) gs = GridSpec(4, ncols + 1, width_ratios=ncols * [1., ] + [0.09, ]) clevels = vname_to_clevels[vname] # get anusplin obs climatology season_to_obs_anusplin = plot_performance_err_with_anusplin.get_seasonal_clim_obs_data( rconfig=reanalysis_driven_config, vname=vname, season_to_months=season_to_months, bmp_info=bmp_info, n_agg_x=nx_agg_anusplin, n_agg_y=ny_agg_anusplin) row = 0 # Plot CRU values------------------------- bmp_info_agg, season_to_obs_cru = plot_performance_err_with_cru.get_seasonal_clim_obs_data( rconfig=reanalysis_driven_config, bmp_info=bmp_info, season_to_months=season_to_months, obs_path=vname_to_cru_path[vname], vname=vname ) # Mask out the Great Lakes cru_mask = get_mask(bmp_info_agg.lons, bmp_info_agg.lats, shp_path=os.path.join(GL_SHP_FOLDER, "gl_cst.shp")) for season in season_to_obs_cru: season_to_obs_cru[season] = np.ma.masked_where(cru_mask > 0.5, season_to_obs_cru[season]) ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = None xx_agg, yy_agg = bmp_info_agg.get_proj_xy() for j, (season, obs_field) in enumerate(season_to_obs_cru.items()): ax = ax_list[j] cs = bmp_info_agg.basemap.contourf(xx_agg, yy_agg, obs_field.copy(), levels=clevels, ax=ax) bmp_info.basemap.drawcoastlines(ax=ax) bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) ax.set_title(season) ax_list[0].set_ylabel("CRU") # plt.colorbar(cs, caax=ax_list[-1]) row += 1 # Plot ANUSPLIN values------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = None for j, (season, obs_field) in enumerate(season_to_obs_anusplin.items()): ax = ax_list[j] cs = bmp_info.basemap.contourf(xx, yy, obs_field, levels=clevels, ax=ax) bmp_info.basemap.drawcoastlines(ax=ax) bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) ax.set_title(season) ax_list[0].set_ylabel("Hopkinson") cb = plt.colorbar(cs, cax=fig.add_subplot(gs[:2, -1])) cb.ax.set_xlabel(infovar.get_units(vname)) _format_axes(ax_list, vname=vname) row += 1 # Plot model (CRCM) values------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # cs = None # # season_to_field_crcm = analysis.get_seasonal_climatology_for_runconfig(run_config=reanalysis_driven_config, # varname=vname, level=0, # season_to_months=season_to_months) # # for j, (season, crcm_field) in enumerate(season_to_field_crcm.items()): # ax = ax_list[j] # cs = bmp_info.basemap.contourf(xx, yy, crcm_field * 1000 * 24 * 3600, levels=clevels, ax=ax) # bmp_info.basemap.drawcoastlines(ax=ax) # bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) # ax.set_title(season) # # ax_list[0].set_ylabel(reanalysis_driven_config.label) # cb = plt.colorbar(cs, cax=fig.add_subplot(gs[:2, -1])) # cb.ax.set_xlabel(infovar.get_units(vname)) # _format_axes(ax_list, vname=vname) # row += 1 # Plot (Model - CRU) Performance biases------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = plot_performance_err_with_cru.compare_vars(vname_model=vname, vname_obs=None, r_config=reanalysis_driven_config, season_to_months=season_to_months, obs_path=vname_to_cru_path[vname], bmp_info_agg=bmp_info_agg, diff_axes_list=ax_list, mask_shape_file=os.path.join(GL_SHP_FOLDER, "gl_cst.shp"), nx_agg_model=nx_agg_model, ny_agg_model=ny_agg_model) ax_list[0].set_ylabel("{label}\n--\nCRU".format(label=reanalysis_driven_config.label)) _format_axes(ax_list, vname=vname) row += 1 # Plot performance+BFE errors with respect to CRU (Model - CRU)------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # plot_performance_err_with_cru.compare_vars(vname, vname_obs=None, obs_path=vname_to_cru_path[vname], # r_config=gcm_driven_config, # bmp_info_agg=bmp_info_agg, season_to_months=season_to_months, # axes_list=ax_list) # _format_axes(ax_list, vname=vname) # ax_list[0].set_ylabel("{label}\nvs\nCRU".format(label=gcm_driven_config.label)) # row += 1 # Plot performance errors with respect to ANUSPLIN (Model - ANUSPLIN)------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] plot_performance_err_with_anusplin.compare_vars(vname, {vname: season_to_obs_anusplin}, r_config=reanalysis_driven_config, bmp_info_agg=bmp_info, season_to_months=season_to_months, axes_list=ax_list) _format_axes(ax_list, vname=vname) ax_list[0].set_ylabel("{label}\n--\nHopkinson".format(label=reanalysis_driven_config.label)) row += 1 # Plot performance+BFE errors with respect to ANUSPLIN (Model - ANUSPLIN)------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # plot_performance_err_with_anusplin.compare_vars(vname, {vname: season_to_obs_anusplin}, # r_config=gcm_driven_config, # bmp_info_agg=bmp_info, season_to_months=season_to_months, # axes_list=ax_list) # _format_axes(ax_list, vname=vname) # ax_list[0].set_ylabel("{label}\nvs\nHopkinson".format(label=gcm_driven_config.label)) cb = plt.colorbar(cs, cax=fig.add_subplot(gs[-2:, -1])) cb.ax.set_xlabel(infovar.get_units(vname)) # Save the plot img_file = "{vname}_{sy}-{ey}_{sim_label}.png".format( vname=vname, sy=reanalysis_driven_config.start_year, ey=reanalysis_driven_config.end_year, sim_label=reanalysis_driven_config.label) img_file = img_folder.joinpath(img_file) with img_file.open("wb") as f: fig.savefig(f, bbox_inches="tight") plt.close(fig)
def main(): season_to_months = OrderedDict([(s, months) for s, months in DEFAULT_SEASON_TO_MONTHS.items() if s.lower() not in ["summer", "fall"]]) r_config_01 = RunConfig( data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl.hdf5", start_year=1980, end_year=1996, label="CRCM5-L" ) r_config_04 = RunConfig( data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.4_crcm5-hcd-rl.hdf5", start_year=1980, end_year=1996, label="CRCM5-L(0.4)" ) r_config = r_config_04 # Number of points for aggregation nx_agg_model = 1 ny_agg_model = 1 nx_agg_obs = 2 ny_agg_obs = 2 r_config_cc = RunConfig( data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/cc-canesm2-driven/quebec_0.1_crcm5-hcd-rl-cc-canesm2-1980-2010.hdf5", start_year=1980, end_year=1996, label="CRCM5-L" ) bmp_info = analysis.get_basemap_info_from_hdf(file_path=r_config.data_path) if nx_agg_model * ny_agg_model > 1: bmp_info_agg = bmp_info.get_aggregated(nagg_x=nx_agg_model, nagg_y=ny_agg_model) else: bmp_info_agg = bmp_info # Validate temperature and precip model_vars = ["I5", ] obs_vars = ["SWE", ] obs_paths = [ "/RESCUE/skynet3_rech1/huziy/swe_ross_brown/swe.nc4", ] plot_all_vars_in_one_fig = True fig = None gs = None row_axes = None obs_row_axes = None ncols = None if plot_all_vars_in_one_fig: plot_utils.apply_plot_params(font_size=12, width_pt=None, width_cm=12, height_cm=18) fig = plt.figure() ncols = len(season_to_months) + 1 gs = GridSpec(len(model_vars) * 3, ncols, width_ratios=(ncols - 1) * [1., ] + [0.05, ]) else: plot_utils.apply_plot_params(font_size=12, width_pt=None, width_cm=25, height_cm=25) row = 0 for mname, oname, opath in zip(model_vars, obs_vars, obs_paths): if plot_all_vars_in_one_fig: # Obs row is for observed values obs_row_axes = [fig.add_subplot(gs[row, col]) for col in range(ncols)] obs_row_axes[-1].set_title("mm") row += 1 model_row_axes = [fig.add_subplot(gs[row, col]) for col in range(ncols - 1)] row += 1 row_axes = [fig.add_subplot(gs[row, col]) for col in range(ncols)] row += 1 compare_vars(vname_model=mname, vname_obs=oname, r_config=r_config, season_to_months=season_to_months, nx_agg_model=nx_agg_model, ny_agg_model=ny_agg_model, nx_agg_obs=nx_agg_obs, ny_agg_obs=ny_agg_obs, bmp_info_agg=bmp_info_agg, bmp_info_model=bmp_info, obs_path=opath, diff_axes_list=row_axes, obs_axes_list=obs_row_axes, model_axes_list=model_row_axes) if plot_all_vars_in_one_fig: obs_row_axes[0].set_ylabel("(a)", rotation="horizontal", labelpad=10) model_row_axes[0].set_ylabel("(b)", rotation="horizontal", labelpad=10) row_axes[0].set_ylabel("(c)", rotation="horizontal", labelpad=10) for ax in row_axes[:-1]: ax.set_title("") # row_axes[0].annotate("(a)", (-0.2, 0.5), font_properties=FontProperties(weight="bold"), xycoords="axes fraction") # Plot bfe errs # row_axes = [fig.add_subplot(gs[row, col]) for col in range(ncols)] # plot_swe_bfes(r_config, r_config_cc, vname_model="I5", season_to_months=season_to_months, # bmp_info=bmp_info, axes_list=row_axes) # # row_axes[-1].set_visible(False) # row_axes[0].annotate("(b)", (0, 1.05), font_properties=FontProperties(weight="bold"), xycoords="axes fraction") # row_axes[0].set_ylabel("(b)", rotation="horizontal", labelpad=10) # for ax in row_axes[:-1]: # ax.set_title("") # Save the figure if necessary if plot_all_vars_in_one_fig: from crcm5.analyse_hdf import common_plot_params fig_path = img_folder.joinpath("{}_{}.png".format("_".join(model_vars), r_config.label)) with fig_path.open("wb") as figfile: fig.savefig(figfile, format="png", bbox_inches="tight", dpi=common_plot_params.FIG_SAVE_DPI) plt.close(fig)
def main(): if not img_folder.is_dir(): img_folder.mkdir(parents=True) season_to_months = OrderedDict([ ("Winter (DJF)", (1, 2, 12)), ("Spring (MAM)", range(3, 6)), ("Summer (JJA)", range(6, 9)), ("Fall (SON)", range(9, 12)), ]) varnames = ["TT", "PR"] plot_utils.apply_plot_params(font_size=10, width_pt=None, width_cm=20, height_cm=17) # reanalysis_driven_config = RunConfig(data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl.hdf5", # start_year=1980, end_year=2010, label="ERAI-CRCM5-L") # reanalysis_driven_config = RunConfig( data_path= "/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.4_crcm5-hcd-rl.hdf5", start_year=1980, end_year=2010, label="ERAI-CRCM5-L(0.4)") nx_agg_model = 1 ny_agg_model = 1 nx_agg_anusplin = 4 ny_agg_anusplin = 4 gcm_driven_config = RunConfig( data_path= "/RESCUE/skynet3_rech1/huziy/hdf_store/cc-canesm2-driven/quebec_0.1_crcm5-hcd-rl-cc-canesm2-1980-2010.hdf5", start_year=1980, end_year=2010, label="CanESM2-CRCM5-L") bmp_info = analysis.get_basemap_info(r_config=reanalysis_driven_config) xx, yy = bmp_info.get_proj_xy() field_cmap = cm.get_cmap("jet", 10) vname_to_clevels = { "TT": np.arange(-30, 32, 2), "PR": np.arange(0, 6.5, 0.5) } vname_to_anusplin_path = { "TT": "/home/huziy/skynet3_rech1/anusplin_links", "PR": "/home/huziy/skynet3_rech1/anusplin_links" } vname_to_cru_path = { "TT": "/HOME/data/Validation/CRU_TS_3.1/Original_files_gzipped/cru_ts_3_10.1901.2009.tmp.dat.nc", "PR": "/HOME/data/Validation/CRU_TS_3.1/Original_files_gzipped/cru_ts_3_10.1901.2009.pre.dat.nc" } for vname in varnames: fig = plt.figure() ncols = len(season_to_months) gs = GridSpec(4, ncols + 1, width_ratios=ncols * [ 1., ] + [ 0.09, ]) clevels = vname_to_clevels[vname] # get anusplin obs climatology season_to_obs_anusplin = plot_performance_err_with_anusplin.get_seasonal_clim_obs_data( rconfig=reanalysis_driven_config, vname=vname, season_to_months=season_to_months, bmp_info=bmp_info, n_agg_x=nx_agg_anusplin, n_agg_y=ny_agg_anusplin) row = 0 # Plot CRU values------------------------- bmp_info_agg, season_to_obs_cru = plot_performance_err_with_cru.get_seasonal_clim_obs_data( rconfig=reanalysis_driven_config, bmp_info=bmp_info, season_to_months=season_to_months, obs_path=vname_to_cru_path[vname], vname=vname) # Mask out the Great Lakes cru_mask = get_mask(bmp_info_agg.lons, bmp_info_agg.lats, shp_path=os.path.join(GL_SHP_FOLDER, "gl_cst.shp")) for season in season_to_obs_cru: season_to_obs_cru[season] = np.ma.masked_where( cru_mask > 0.5, season_to_obs_cru[season]) ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = None xx_agg, yy_agg = bmp_info_agg.get_proj_xy() for j, (season, obs_field) in enumerate(season_to_obs_cru.items()): ax = ax_list[j] cs = bmp_info_agg.basemap.contourf(xx_agg, yy_agg, obs_field.copy(), levels=clevels, ax=ax) bmp_info.basemap.drawcoastlines(ax=ax) bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) ax.set_title(season) ax_list[0].set_ylabel("CRU") # plt.colorbar(cs, caax=ax_list[-1]) row += 1 # Plot ANUSPLIN values------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = None for j, (season, obs_field) in enumerate(season_to_obs_anusplin.items()): ax = ax_list[j] cs = bmp_info.basemap.contourf(xx, yy, obs_field, levels=clevels, ax=ax) bmp_info.basemap.drawcoastlines(ax=ax) bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) ax.set_title(season) ax_list[0].set_ylabel("Hopkinson") cb = plt.colorbar(cs, cax=fig.add_subplot(gs[:2, -1])) cb.ax.set_xlabel(infovar.get_units(vname)) _format_axes(ax_list, vname=vname) row += 1 # Plot model (CRCM) values------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # cs = None # # season_to_field_crcm = analysis.get_seasonal_climatology_for_runconfig(run_config=reanalysis_driven_config, # varname=vname, level=0, # season_to_months=season_to_months) # # for j, (season, crcm_field) in enumerate(season_to_field_crcm.items()): # ax = ax_list[j] # cs = bmp_info.basemap.contourf(xx, yy, crcm_field * 1000 * 24 * 3600, levels=clevels, ax=ax) # bmp_info.basemap.drawcoastlines(ax=ax) # bmp_info.basemap.readshapefile(BASIN_BOUNDARIES_SHP[:-4], "basin", ax=ax) # ax.set_title(season) # # ax_list[0].set_ylabel(reanalysis_driven_config.label) # cb = plt.colorbar(cs, cax=fig.add_subplot(gs[:2, -1])) # cb.ax.set_xlabel(infovar.get_units(vname)) # _format_axes(ax_list, vname=vname) # row += 1 # Plot (Model - CRU) Performance biases------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] cs = plot_performance_err_with_cru.compare_vars( vname_model=vname, vname_obs=None, r_config=reanalysis_driven_config, season_to_months=season_to_months, obs_path=vname_to_cru_path[vname], bmp_info_agg=bmp_info_agg, diff_axes_list=ax_list, mask_shape_file=os.path.join(GL_SHP_FOLDER, "gl_cst.shp"), nx_agg_model=nx_agg_model, ny_agg_model=ny_agg_model) ax_list[0].set_ylabel( "{label}\n--\nCRU".format(label=reanalysis_driven_config.label)) _format_axes(ax_list, vname=vname) row += 1 # Plot performance+BFE errors with respect to CRU (Model - CRU)------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # plot_performance_err_with_cru.compare_vars(vname, vname_obs=None, obs_path=vname_to_cru_path[vname], # r_config=gcm_driven_config, # bmp_info_agg=bmp_info_agg, season_to_months=season_to_months, # axes_list=ax_list) # _format_axes(ax_list, vname=vname) # ax_list[0].set_ylabel("{label}\nvs\nCRU".format(label=gcm_driven_config.label)) # row += 1 # Plot performance errors with respect to ANUSPLIN (Model - ANUSPLIN)------------------------- ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] plot_performance_err_with_anusplin.compare_vars( vname, {vname: season_to_obs_anusplin}, r_config=reanalysis_driven_config, bmp_info_agg=bmp_info, season_to_months=season_to_months, axes_list=ax_list) _format_axes(ax_list, vname=vname) ax_list[0].set_ylabel("{label}\n--\nHopkinson".format( label=reanalysis_driven_config.label)) row += 1 # Plot performance+BFE errors with respect to ANUSPLIN (Model - ANUSPLIN)------------------------- # ax_list = [fig.add_subplot(gs[row, j]) for j in range(ncols)] # plot_performance_err_with_anusplin.compare_vars(vname, {vname: season_to_obs_anusplin}, # r_config=gcm_driven_config, # bmp_info_agg=bmp_info, season_to_months=season_to_months, # axes_list=ax_list) # _format_axes(ax_list, vname=vname) # ax_list[0].set_ylabel("{label}\nvs\nHopkinson".format(label=gcm_driven_config.label)) cb = plt.colorbar(cs, cax=fig.add_subplot(gs[-2:, -1])) cb.ax.set_xlabel(infovar.get_units(vname)) # Save the plot img_file = "{vname}_{sy}-{ey}_{sim_label}.png".format( vname=vname, sy=reanalysis_driven_config.start_year, ey=reanalysis_driven_config.end_year, sim_label=reanalysis_driven_config.label) img_file = img_folder.joinpath(img_file) with img_file.open("wb") as f: fig.savefig(f, bbox_inches="tight") plt.close(fig)