def test_equal_number_of_plots_and_old_shape(self): nplots = 4 oldshape = (2, 2) expected_shape = (2, 2) new_shape = plotter._best_grid_shape(nplots, oldshape) self.assertEqual(new_shape, expected_shape)
def test_returned_shape_large(self): nplots = 57 oldshape = (220, 12) expected_shape = (5, 12) new_shape = plotter._best_grid_shape(nplots, oldshape) self.assertEqual(new_shape, expected_shape)
def test_invalid_shape(self): nplots = 2532 oldshape = (22, 12) with self.assertRaises(ValueError): plotter._best_grid_shape(nplots, oldshape)
def test_returned_shape_small(self): nplots = 2 oldshape = (2, 2) expected_shape = (1, 2) new_shape = plotter._best_grid_shape(nplots, oldshape) self.assertEqual(new_shape, expected_shape)
def test_returned_shape_large(self): nplots = 57 oldshape = (12, 220) expected_shape = (12, 5) new_shape = plotter._best_grid_shape(nplots, oldshape) self.assertEqual(new_shape, expected_shape)
def test_returned_shape_small(self): nplots = 2 oldshape = (2, 2) expected_shape = (2, 1) new_shape = plotter._best_grid_shape(nplots, oldshape) self.assertEqual(new_shape, expected_shape)
def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets, model_names, file_name, row, column, map_projection=None): '''Draw maps of observed multi-year climatology and biases of models"''' # calculate climatology of observation data obs_clim = utils.calc_temporal_mean(obs_dataset) # determine the metrics map_of_bias = metrics.TemporalMeanBias() # create the Evaluation object bias_evaluation = Evaluation(obs_dataset, # Reference dataset for the evaluation model_datasets, # list of target datasets for the evaluation [map_of_bias, map_of_bias]) # run the evaluation (bias calculation) bias_evaluation.run() rcm_bias = bias_evaluation.results[0] fig = plt.figure() lat_min = obs_dataset.lats.min() lat_max = obs_dataset.lats.max() lon_min = obs_dataset.lons.min() lon_max = obs_dataset.lons.max() string_list = list(string.ascii_lowercase) nmodels = len(model_datasets) row, column = plotter._best_grid_shape((row, column), nmodels + 1) ax = fig.add_subplot(row,column,1) if map_projection == 'npstere': m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, resolution = 'l', fix_aspect=True) else: m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=True) if obs_dataset.lons.ndim == 1 and obs_dataset.lats.ndim == 1: lons, lats = np.meshgrid(obs_dataset.lons, obs_dataset.lats) if obs_dataset.lons.ndim == 2 and obs_dataset.lats.ndim == 2: lons = obs_dataset.lons lats = obs_dataset.lats x,y = m(lons, lats) m.drawcoastlines(linewidth=1) m.drawcountries(linewidth=1) m.drawstates(linewidth=0.5, color='w') max = m.contourf(x,y,obs_clim,levels = plotter._nice_intervals(obs_dataset.values, 10), extend='both',cmap='rainbow') ax.annotate('(a) \n' + obs_name,xy=(lon_min, lat_min)) cax = fig.add_axes([0.02, 1.-float(1./row)+1./row*0.25, 0.01, 1./row*0.5]) plt.colorbar(max, cax = cax) clevs = plotter._nice_intervals(rcm_bias, 11) for imodel in np.arange(nmodels): ax = fig.add_subplot(row, column,2+imodel) if map_projection == 'npstere': m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, resolution = 'l', fix_aspect=True) else: m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=True) m.drawcoastlines(linewidth=1) m.drawcountries(linewidth=1) m.drawstates(linewidth=0.5, color='w') max = m.contourf(x,y,rcm_bias[imodel,:],levels = clevs, extend='both', cmap='RdBu_r') ax.annotate('('+string_list[imodel+1]+') \n '+model_names[imodel],xy=(lon_min, lat_min)) cax = fig.add_axes([0.91, 0.5, 0.015, 0.4]) plt.colorbar(max, cax = cax) plt.subplots_adjust(hspace=0.01,wspace=0.05) fig.savefig(file_name,dpi=600,bbox_inches='tight')
def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets, model_names, file_name, row, column, map_projection=None): '''Draw maps of observed multi-year climatology and biases of models"''' # calculate climatology of observation data obs_clim = utils.calc_temporal_mean(obs_dataset) # determine the metrics map_of_bias = metrics.TemporalMeanBias() # create the Evaluation object bias_evaluation = Evaluation(obs_dataset, # Reference dataset for the evaluation model_datasets, # list of target datasets for the evaluation [map_of_bias, map_of_bias]) # run the evaluation (bias calculation) bias_evaluation.run() rcm_bias = bias_evaluation.results[0] fig = plt.figure() lat_min = obs_dataset.lats.min() lat_max = obs_dataset.lats.max() lon_min = obs_dataset.lons.min() lon_max = obs_dataset.lons.max() string_list = list(string.ascii_lowercase) nmodels = len(model_datasets) row, column = plotter._best_grid_shape(nmodels + 1, (row, column)) ax = fig.add_subplot(row,column,1) if map_projection == 'npstere': m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, resolution = 'l', fix_aspect=True) else: m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=True) if obs_dataset.lons.ndim == 1 and obs_dataset.lats.ndim == 1: lons, lats = np.meshgrid(obs_dataset.lons, obs_dataset.lats) if obs_dataset.lons.ndim == 2 and obs_dataset.lats.ndim == 2: lons = obs_dataset.lons lats = obs_dataset.lats x,y = m(lons, lats) m.drawcoastlines(linewidth=1) m.drawcountries(linewidth=1) m.drawstates(linewidth=0.5, color='w') max = m.contourf(x,y,obs_clim,levels = plotter._nice_intervals(obs_dataset.values, 10), extend='both',cmap='rainbow') ax.annotate('(a) \n' + obs_name,xy=(lon_min, lat_min)) cax = fig.add_axes([0.02, 1.-float(1./row)+1./row*0.25, 0.01, 1./row*0.5]) plt.colorbar(max, cax = cax) clevs = plotter._nice_intervals(rcm_bias, 11) for imodel in np.arange(nmodels): ax = fig.add_subplot(row, column,2+imodel) if map_projection == 'npstere': m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, resolution = 'l', fix_aspect=True) else: m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=True) m.drawcoastlines(linewidth=1) m.drawcountries(linewidth=1) m.drawstates(linewidth=0.5, color='w') max = m.contourf(x,y,rcm_bias[imodel,:],levels = clevs, extend='both', cmap='RdBu_r') ax.annotate('('+string_list[imodel+1]+') \n '+model_names[imodel],xy=(lon_min, lat_min)) cax = fig.add_axes([0.91, 0.5, 0.015, 0.4]) plt.colorbar(max, cax = cax) plt.subplots_adjust(hspace=0.01,wspace=0.05) fig.savefig(file_name,dpi=600,bbox_inches='tight')