def modelPlots(self, m): def _fheight(region): if region in ["arctic", "southern"]: return 6.8 return 2.8 bname = "%s/%s_Benchmark.nc" % (self.output_path, self.name) fname = "%s/%s_%s.nc" % (self.output_path, self.name, m.name) if not os.path.isfile(bname): return if not os.path.isfile(fname): return # get the HTML page page = [ page for page in self.layout.pages if "MeanState" in page.name ][0] with Dataset(fname) as dataset: group = dataset.groups["MeanState"] variables = getVariableList(group) color = dataset.getncattr("color") vname = "timeint_surface_%s" % self.variable if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "timeint", "MNAME_RNAME_timeint.png", side="MODEL SURFACE MEAN", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=self.limits["timeint"]["min"], vmax=self.limits["timeint"]["max"], cmap=self.cmap, land=0.750, water=0.875) fig.savefig("%s/%s_%s_timeint.png" % (self.output_path, m.name, region)) plt.close() vname = "bias_surface_%s" % self.variable if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "bias", "MNAME_RNAME_bias.png", side="SURFACE MEAN BIAS", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=self.limits["bias"]["min"], vmax=self.limits["bias"]["max"], cmap="seismic", land=0.750, water=0.875) fig.savefig("%s/%s_%s_bias.png" % (self.output_path, m.name, region)) plt.close() vname = "biasscore_surface_%s" % self.variable if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "biasscore", "MNAME_RNAME_biasscore.png", side="SURFACE MEAN BIAS SCORE", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=0, vmax=1, cmap="RdYlGn", land=0.750, water=0.875) fig.savefig("%s/%s_%s_biasscore.png" % (self.output_path, m.name, region)) plt.close() vname = "rmse_surface_%s" % self.variable if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "rmse", "MNAME_RNAME_rmse.png", side="SURFACE MEAN RMSE", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=self.limits["rmse"]["min"], vmax=self.limits["rmse"]["max"], cmap="YlOrRd", land=0.750, water=0.875) fig.savefig("%s/%s_%s_rmse.png" % (self.output_path, m.name, region)) plt.close() vname = "rmsescore_surface_%s" % self.variable if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "rmsescore", "MNAME_RNAME_rmsescore.png", side="SURFACE MEAN RMSE SCORE", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=0, vmax=1, cmap="RdYlGn", land=0.750, water=0.875) fig.savefig("%s/%s_%s_rmsescore.png" % (self.output_path, m.name, region)) plt.close() for region in self.regions: vname = "timelonint_of_%s_over_%s" % (self.variable, region) if vname in variables: var = Variable(filename=fname, variable_name=vname, groupname="MeanState") if region == "global": page.addFigure( "Mean regional depth profiles", "timelonint", "MNAME_RNAME_timelonint.png", side="MODEL DEPTH PROFILE", legend=True, longname="Time/longitude averaged profile") fig, ax = plt.subplots(figsize=(6.8, 2.8), tight_layout=True) l = np.hstack([var.lat_bnds[:, 0], var.lat_bnds[-1, 1]]) d = np.hstack( [var.depth_bnds[:, 0], var.depth_bnds[-1, 1]]) ind = np.all(var.data.mask, axis=0) ind = np.ma.masked_array(range(ind.size), mask=ind, dtype=int) b = ind.min() e = ind.max() + 1 ax.pcolormesh( l[b:(e + 1)], d, var.data[:, b:e], vmin=self.limits["timelonint"]["global"]["min"], vmax=self.limits["timelonint"]["global"]["max"], cmap=self.cmap) ax.set_xlabel("latitude") ax.set_ylim((d.max(), d.min())) ax.set_ylabel("depth [m]") fig.savefig("%s/%s_%s_timelonint.png" % (self.output_path, m.name, region)) plt.close() if not self.master: return with Dataset(bname) as dataset: group = dataset.groups["MeanState"] variables = getVariableList(group) color = dataset.getncattr("color") vname = "timeint_surface_%s" % self.variable if vname in variables: var = Variable(filename=bname, variable_name=vname, groupname="MeanState") page.addFigure("Period mean at surface", "benchmark_timeint", "Benchmark_RNAME_timeint.png", side="BENCHMARK SURFACE MEAN", legend=True) for region in self.regions: fig = plt.figure() ax = fig.add_axes([0.06, 0.025, 0.88, 0.965]) var.plot(ax, region=region, vmin=self.limits["timeint"]["min"], vmax=self.limits["timeint"]["max"], cmap=self.cmap, land=0.750, water=0.875) fig.savefig("%s/Benchmark_%s_timeint.png" % (self.output_path, region)) plt.close() for region in self.regions: vname = "timelonint_of_%s_over_%s" % (self.variable, region) if vname in variables: var = Variable(filename=bname, variable_name=vname, groupname="MeanState") if region == "global": page.addFigure( "Mean regional depth profiles", "benchmark_timelonint", "Benchmark_RNAME_timelonint.png", side="BENCHMARK DEPTH PROFILE", legend=True, longname="Time/longitude averaged profile") fig, ax = plt.subplots(figsize=(6.8, 2.8), tight_layout=True) l = np.hstack([var.lat_bnds[:, 0], var.lat_bnds[-1, 1]]) d = np.hstack( [var.depth_bnds[:, 0], var.depth_bnds[-1, 1]]) ind = np.all(var.data.mask, axis=0) ind = np.ma.masked_array(range(ind.size), mask=ind, dtype=int) b = ind.min() e = ind.max() + 1 ax.pcolormesh( l[b:(e + 1)], d, var.data[:, b:e], vmin=self.limits["timelonint"]["global"]["min"], vmax=self.limits["timelonint"]["global"]["max"], cmap=self.cmap) ax.set_xlabel("latitude") ax.set_ylim((d.max(), d.min())) ax.set_ylabel("depth [m]") fig.savefig("%s/Benchmark_%s_timelonint.png" % (self.output_path, region)) plt.close()
def modelPlots(self, m): bname = "%s/%s_Benchmark.nc" % (self.output_path, self.name) fname = "%s/%s_%s.nc" % (self.output_path, self.name, m.name) if not os.path.isfile(bname): return if not os.path.isfile(fname): return # get the HTML page page = [ page for page in self.layout.pages if "MeanState" in page.name ][0] page.priority = ["Beginning", "Ending", "Strength", "Score", "Overall"] for y in self.years: # ---------------------------------------------------------------- # plt.figure(figsize=(5, 5), tight_layout=True) has_data = False for name, color, alpha in zip([bname, fname], ['k', m.color], [0.6, 1.0]): try: v = Variable(filename=name, variable_name="mag%d" % y, groupname="MeanState") has_data = True except: continue plt.polar(v.time / 365. * 2 * np.pi, v.data, '-', color=color, alpha=alpha, lw=2) if has_data: plt.xticks(bnd_months[:-1] / 365. * 2 * np.pi, lbl_months) plt.ylim(0, self.limits["mag"]) plt.savefig("%s/%s_mag%d.png" % (self.output_path, m.name, y)) page.addFigure("%d" % y, "mag%d" % y, "MNAME_mag%d.png" % y, side="DIURNAL MAGNITUDE", legend=False) plt.close() # ---------------------------------------------------------------- # fig, ax = plt.subplots(figsize=(8, 5), tight_layout=True) has_data = False unit = "" for name, color, alpha, lbl in zip([bname, fname], ['k', m.color], [0.6, 1.0], ['Benchmark', m.name]): try: v = Variable(filename=name, variable_name="cycle%d" % y, groupname="MeanState") has_data = True unit = v.unit except: continue v.plot(ax, color=color, alpha=alpha, lw=2, label=lbl) if has_data: ax.set_xticks(np.linspace(0, 1, 9) / 365 + 1850) ax.set_xticklabels( ["%2d:00" % t for t in np.linspace(0, 24, 9)]) ax.set_ylim(self.limits['cycle']['min'], self.limits['cycle']['max']) ax.grid(True) ax.set_ylabel(post.UnitStringToMatplotlib(unit)) ax.set_xlabel("local time") ax.legend(bbox_to_anchor=(0, 1.005, 1, 0.25), loc='lower left', mode='expand', ncol=2, borderaxespad=0, frameon=False) plt.savefig("%s/%s_cycle%d.png" % (self.output_path, m.name, y)) page.addFigure("%d" % y, "cycle%d" % y, "MNAME_cycle%d.png" % y, side="SEASONAL DIURNAL CYCLE", legend=False) plt.close()