Default vales for subplot grid in RCMES script
Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/3e66d94f Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/3e66d94f Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/3e66d94f Branch: refs/heads/master Commit: 3e66d94fce1935aac2a8cc88025d50858d78f3ba Parents: d868be1 Author: Alex <ago...@users.noreply.github.com> Authored: Tue Sep 26 16:10:44 2017 -0700 Committer: Alex <ago...@users.noreply.github.com> Committed: Tue Sep 26 16:10:44 2017 -0700 ---------------------------------------------------------------------- RCMES/metrics_and_plots.py | 65 +++++++++++++++++++---------------------- RCMES/run_RCMES.py | 8 ++--- 2 files changed, 34 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/3e66d94f/RCMES/metrics_and_plots.py ---------------------------------------------------------------------- diff --git a/RCMES/metrics_and_plots.py b/RCMES/metrics_and_plots.py index 848af9d..78c2f14 100644 --- a/RCMES/metrics_and_plots.py +++ b/RCMES/metrics_and_plots.py @@ -27,7 +27,7 @@ import ocw.metrics as metrics import numpy as np import numpy.ma as ma import matplotlib.pyplot as plt -from mpl_toolkits.basemap import Basemap +from mpl_toolkits.basemap import Basemap from matplotlib import rcParams from matplotlib.patches import Polygon import string @@ -46,7 +46,7 @@ def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets model_datasets, # list of target datasets for the evaluation [map_of_bias, map_of_bias]) # run the evaluation (bias calculation) - bias_evaluation.run() + bias_evaluation.run() rcm_bias = bias_evaluation.results[0] @@ -57,7 +57,9 @@ def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets lon_min = obs_dataset.lons.min() lon_max = obs_dataset.lons.max() - string_list = list(string.ascii_lowercase) + 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, @@ -79,9 +81,9 @@ def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets 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) + plt.colorbar(max, cax = cax) clevs = plotter._nice_intervals(rcm_bias, 11) - for imodel in np.arange(len(model_datasets)): + for imodel in np.arange(nmodels): ax = fig.add_subplot(row, column,2+imodel) if map_projection == 'npstere': @@ -97,7 +99,7 @@ def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets 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.colorbar(max, cax = cax) plt.subplots_adjust(hspace=0.01,wspace=0.05) @@ -122,16 +124,16 @@ def Taylor_diagram_spatial_pattern_of_multiyear_climatology(obs_dataset, obs_nam [taylor_diagram]) # run the evaluation (bias calculation) - taylor_evaluation.run() + taylor_evaluation.run() taylor_data = taylor_evaluation.results[0] plotter.draw_taylor_diagram(taylor_data, model_names, obs_name, file_name, pos='upper right',frameon=False) -def Time_series_subregion(obs_subregion_mean, obs_name, model_subregion_mean, model_names, seasonal_cycle, +def Time_series_subregion(obs_subregion_mean, obs_name, model_subregion_mean, model_names, seasonal_cycle, file_name, row, column, x_tick=['']): - nmodel, nt, nregion = model_subregion_mean.shape + nmodel, nt, nregion = model_subregion_mean.shape if seasonal_cycle: obs_data = ma.mean(obs_subregion_mean.reshape([1,nt/12,12,nregion]), axis=1) @@ -140,19 +142,19 @@ def Time_series_subregion(obs_subregion_mean, obs_name, model_subregion_mean, mo else: obs_data = obs_subregion_mean model_data = model_subregion_mean - + x_axis = np.arange(nt) x_tick_values = x_axis fig = plt.figure() rcParams['xtick.labelsize'] = 6 rcParams['ytick.labelsize'] = 6 - + for iregion in np.arange(nregion): - ax = fig.add_subplot(row, column, iregion+1) + ax = fig.add_subplot(row, column, iregion+1) x_tick_labels = [''] if iregion+1 > column*(row-1): - x_tick_labels = x_tick + x_tick_labels = x_tick else: x_tick_labels=[''] ax.plot(x_axis, obs_data[0, :, iregion], color='r', lw=2, label=obs_name) @@ -162,8 +164,8 @@ def Time_series_subregion(obs_subregion_mean, obs_name, model_subregion_mean, mo ax.set_xticks(x_tick_values) ax.set_xticklabels(x_tick_labels) ax.set_title('Region %02d' % (iregion+1), fontsize=8) - - ax.legend(bbox_to_anchor=(-0.2, row/2), loc='center' , prop={'size':7}, frameon=False) + + ax.legend(bbox_to_anchor=(-0.2, row/2), loc='center' , prop={'size':7}, frameon=False) fig.subplots_adjust(hspace=0.7, wspace=0.5) fig.savefig(file_name, dpi=600, bbox_inches='tight') @@ -172,7 +174,7 @@ def Portrait_diagram_subregion(obs_subregion_mean, obs_name, model_subregion_mea file_name, normalize=True): nmodel, nt, nregion = model_subregion_mean.shape - + if seasonal_cycle: obs_data = ma.mean(obs_subregion_mean.reshape([1,nt/12,12,nregion]), axis=1) model_data = ma.mean(model_subregion_mean.reshape([nmodel,nt/12,12,nregion]), axis=1) @@ -193,35 +195,35 @@ def Portrait_diagram_subregion(obs_subregion_mean, obs_name, model_subregion_mea subregion_metrics[2, iregion, imodel] = metrics.calc_rmse(model_data[imodel, :, iregion], obs_data[0, :, iregion]) # Fourth metric: correlation subregion_metrics[3, iregion, imodel] = metrics.calc_correlation(model_data[imodel, :, iregion], obs_data[0, :, iregion]) - + if normalize: for iregion in np.arange(nregion): - subregion_metrics[0, iregion, : ] = subregion_metrics[0, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. - subregion_metrics[1, iregion, : ] = subregion_metrics[1, iregion, : ]*100. - subregion_metrics[2, iregion, : ] = subregion_metrics[2, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. + subregion_metrics[0, iregion, : ] = subregion_metrics[0, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. + subregion_metrics[1, iregion, : ] = subregion_metrics[1, iregion, : ]*100. + subregion_metrics[2, iregion, : ] = subregion_metrics[2, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. region_names = ['R%02d' % i for i in np.arange(nregion)+1] for imetric, metric in enumerate(['bias','std','RMSE','corr']): - plotter.draw_portrait_diagram(subregion_metrics[imetric, :, :], region_names, model_names, file_name+'_'+metric, - xlabel='model',ylabel='region') + plotter.draw_portrait_diagram(subregion_metrics[imetric, :, :], region_names, model_names, file_name+'_'+metric, + xlabel='model',ylabel='region') def Map_plot_subregion(subregions, ref_dataset, directory): - - lons, lats = np.meshgrid(ref_dataset.lons, ref_dataset.lats) + + lons, lats = np.meshgrid(ref_dataset.lons, ref_dataset.lats) fig = plt.figure() ax = fig.add_subplot(111) m = Basemap(ax=ax, projection='cyl',llcrnrlat = lats.min(), urcrnrlat = lats.max(), llcrnrlon = lons.min(), urcrnrlon = lons.max(), resolution = 'l') m.drawcoastlines(linewidth=0.75) m.drawcountries(linewidth=0.75) - m.etopo() - x, y = m(lons, lats) + m.etopo() + x, y = m(lons, lats) #subregion_array = ma.masked_equal(subregion_array, 0) #max=m.contourf(x, y, subregion_array, alpha=0.7, cmap='Accent') for subregion in subregions: - draw_screen_poly(subregion[1], m, 'w') - plt.annotate(subregion[0],xy=(0.5*(subregion[1][2]+subregion[1][3]), 0.5*(subregion[1][0]+subregion[1][1])), ha='center',va='center', fontsize=8) + draw_screen_poly(subregion[1], m, 'w') + plt.annotate(subregion[0],xy=(0.5*(subregion[1][2]+subregion[1][3]), 0.5*(subregion[1][0]+subregion[1][1])), ha='center',va='center', fontsize=8) fig.savefig(directory+'map_subregion', bbox_inches='tight') def draw_screen_poly(boundary_array, m, linecolor='k'): @@ -238,10 +240,3 @@ def draw_screen_poly(boundary_array, m, linecolor='k'): xy = zip(x,y) poly = Polygon( xy, facecolor='none',edgecolor=linecolor ) plt.gca().add_patch(poly) - - - - - - - http://git-wip-us.apache.org/repos/asf/climate/blob/3e66d94f/RCMES/run_RCMES.py ---------------------------------------------------------------------- diff --git a/RCMES/run_RCMES.py b/RCMES/run_RCMES.py index 027d2e2..ba8ef2a 100644 --- a/RCMES/run_RCMES.py +++ b/RCMES/run_RCMES.py @@ -94,7 +94,7 @@ data_info = config['datasets'] # (first) dataset. We should instead make this a parameter for each # loader and Dataset objects. fact = data_info[0].pop('multiplying_factor', 1) - + """ Step 1: Load the datasets """ print('Loading datasets:\n{}'.format(data_info)) datasets = load_datasets_from_config(extra_opts, *data_info) @@ -262,7 +262,7 @@ if nmetrics > 0: print('metrics {0}/{1}: {2}'.format(imetric, nmetrics, metrics_name)) if metrics_name == 'Map_plot_bias_of_multiyear_climatology': - row, column = plot_info['subplots_array'] + row, column = plot_info.get('subplots_array', (1, 1)) if 'map_projection' in plot_info.keys(): Map_plot_bias_of_multiyear_climatology( reference_dataset, reference_name, target_datasets, target_names, @@ -279,7 +279,7 @@ if nmetrics > 0: elif config['use_subregions']: if (metrics_name == 'Timeseries_plot_subregion_interannual_variability' and average_each_year): - row, column = plot_info['subplots_array'] + row, column = plot_info.get('subplots_array', (1, 1)) Time_series_subregion( reference_subregion_mean, reference_name, target_subregion_mean, target_names, False, file_name, row, column, @@ -288,7 +288,7 @@ if nmetrics > 0: if (metrics_name == 'Timeseries_plot_subregion_annual_cycle' and not average_each_year and month_start==1 and month_end==12): - row, column = plot_info['subplots_array'] + row, column = plot_info.get('subplots_array', (1, 1)) Time_series_subregion( reference_subregion_mean, reference_name, target_subregion_mean, target_names, True,