def plotEnglandPoints(): outPng = 'englandPoints_ANOVA.png' warmingLev = 2.0 relChngDiffMean, rc_r8_mean, rc_r4_mean, rc_r8all_mean, rc_r4all_mean = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) _, _, _, pValueMean, _, _ = anovaAnalysis(relChngDiffMean, rc_r8_mean, rc_r4_mean, rc_r8all_mean, rc_r4all_mean) relChngDiffExt, rc_r8_ext, rc_r4_ext, rc_r8all_ext, rc_r4all_ext = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels, rlVarName='rl', retPer=100) _, _, _, pValueExt, _, _ = anovaAnalysis(relChngDiffMean, rc_r8_mean, rc_r4_mean, rc_r8all_mean, rc_r4all_mean) dslonlat = netCDF4.Dataset('lonlat.nc') lon = dslonlat.variables['lon'][:].transpose() lat = dslonlat.variables['lat'][:].transpose() dslonlat.close() cndlonlat = np.logical_and(lon < 2, lat > 50) cndlonlatMtx = np.tile(cndlonlat, [rc_r8all_mean.shape[0], 1, 1]) cndpval = pValueMean <= .05 cndpvalMtx = np.tile(pvalcnd, [rc_r8all_mean.shape[0], 1, 1]) cnd = np.logical_and(cndpvalMtx, cndlonlatMtx) rc_r8all_mean[~cnd] = np.nan rc_r4all_mean[~cnd] = np.nan shp = rc_r4all_mean.shape rc_r8_ = rc_r8all_mean.reshape([shp[0], shp[1] * shp[2]]) rc_r4_ = rc_r4all_mean.reshape([shp[0], shp[1] * shp[2]]) mn_r8_mean = np.nanmean(rc_r8_, 1) * 100 mn_r4_mean = np.nanmean(rc_r4_, 1) * 100 rc_r8all_ext[~cnd] = np.nan rc_r4all_ext[~cnd] = np.nan shp = rc_r4all_ext.shape rc_r8_ = rc_r8all_ext.reshape([shp[0], shp[1] * shp[2]]) rc_r4_ = rc_r4all_ext.reshape([shp[0], shp[1] * shp[2]]) mn_r8_ext = np.nanmean(rc_r8_, 1) * 100 mn_r4_ext = np.nanmean(rc_r4_, 1) * 100 f = plt.figure(figsize=(7, 3)) gs = gridspec.GridSpec(1, 2) vv = np.concatenate([mn_r4_mean, mn_r8_mean, mn_r4_ext, mn_r8_ext], axis=0) ylm = [np.min(vv) - 1, np.max(vv) + 1] ax0 = plt.subplot(gs[0]) ones = np.ones(mn_r8_mean.shape) plt.plot(ones / 3., mn_r4_mean, 'o', color='green', label='RCP4.5') plt.plot(ones * 2. / 3., mn_r8_mean, 'o', color='navy', label='RCP8.5') plt.xlim([0, 1]) plt.ylim(ylm) plt.ylabel('projected change at $2^\circ C$ (%)') plt.xticks([]) plt.legend(loc='lower right') plt.text(.05, 17, 'a: mean dis.', fontsize=11) plt.grid('on') ax1 = plt.subplot(gs[1]) ones = np.ones(mn_r8_ext.shape) plt.plot(ones / 3., mn_r4_ext, 'o', color='green', label='RCP4.5') plt.plot(ones * 2. / 3., mn_r8_ext, 'o', color='navy', label='RCP8.5') plt.xlim([0, 1]) plt.ylim(ylm) ax1.set_yticklabels('') plt.xticks([]) plt.text(.05, 17, 'b: extreme high dis.', fontsize=11) plt.grid('on') plt.tight_layout() f.savefig(outPng, dpi=300)
def plotFigureANOVA(varType='extHigh', ncDir='/ClimateRun4/multi-hazard/eva'): #varType can be extHigh, extLow, mean outPng = 'anova_' + varType + '.png' f = plt.figure(figsize=(9, 12)) gs = gridspec.GridSpec(3, 3, width_ratios=[1, 1, .05]) mp = None #### at 1.5 #### warmingLev = 1.5 if varType == 'mean': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) descrTxt = 'Means' sigmaMax = 25 elif varType == 'extHigh': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels, rlVarName='rl', retPer=100, shapeParamNcVarName='shape_fit') descrTxt = 'High extremes' sigmaMax = 30 elif varType == 'extLow': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels, rlVarName='rl_min', retPer=15, threshold=.1, shapeParamNcVarName='') descrTxt = 'Low extremes' sigmaMax = 50 sigmaTot, sigmaWithin, sigmaBetween, pValue, effectSize, pValueTtest = anovaAnalysis( relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all) printAnovaStats(sigmaTot, sigmaWithin, sigmaBetween, pValue, pValueTtest) ax00 = plt.subplot(gs[0, 0]) plt00, mp = plotSigma(ax00, sigmaWithin * 100, mp, 'a: $\sigma_{within}, 1.5^\circ C$', txt2=descrTxt, sigmamax=sigmaMax) ax10 = plt.subplot(gs[1, 0]) plt10, mp = plotSigma(ax10, sigmaBetween * 100, mp, 'c: $\sigma_{between}, 1.5^\circ C$', sigmamax=sigmaMax) ax20 = plt.subplot(gs[2, 0]) _, _, mp = plotPvalue(ax20, pValue, mp, 'e: p-val of interpathway diff.') #### at 2.0 #### warmingLev = 2.0 if varType == 'mean': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) elif varType == 'extHigh': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels, rlVarName='rl', retPer=100) elif varType == 'extLow': relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels, rlVarName='rl_min', retPer=15, threshold=.1) sigmaTot, sigmaWithin, sigmaBetween, pValue, effectSize, pValueTtest = anovaAnalysis( relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all) printAnovaStats(sigmaTot, sigmaWithin, sigmaBetween, pValue, pValueTtest) ax01 = plt.subplot(gs[0, 1]) plt01, mp = plotSigma(ax01, sigmaWithin * 100, mp, 'b: $\sigma_{within}, 2.0^\circ C$', sigmamax=sigmaMax) ax11 = plt.subplot(gs[1, 1]) plt11, mp = plotSigma(ax11, sigmaBetween * 100, mp, 'd: $\sigma_{between}, 2.0^\circ C$', sigmamax=sigmaMax) ax21 = plt.subplot(gs[2, 1]) _, _, mp = plotPvalue(ax21, pValue, mp, 'f: p-val of interpathway diff.') cax = plt.subplot(gs[:2, 2]) cb = plt.colorbar(plt01, ax=ax01, cax=cax) cb.set_label('$\sigma$ (%)') ax00.set_aspect('auto') ax10.set_aspect('auto') ax20.set_aspect('auto') ax01.set_aspect('auto') ax11.set_aspect('auto') ax21.set_aspect('auto') cax.set_aspect('auto') plt.tight_layout() f.savefig(outPng, dpi=300)
def plotGrossEnsembles_mean(ncDir='/ClimateRun4/multi-hazard/eva'): outPng = 'wlRelChngGrossEnsembles_mean.png' f = plt.figure(figsize=(9, 8)) gs = gridspec.GridSpec(2, 3, width_ratios=[1, 1, .05]) mp = None warmingLev = 1.5 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax0 = plt.subplot(gs[0, 0]) pcl, mp = plotRelChngDiff(ax0, rc_mega, mp, 'a: $\Delta Q_M$ at $' + str(warmingLev) + '^\circ$', vmax=25) #sigma_im = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) #sigmaT = getTimeSigmaGrossEnsemble(warmingLev, ncDir=ncDir) #sigma = np.sqrt(sigma_im**2. + sigmaT**2.) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) ax1 = plt.subplot(gs[1, 0]) pcl, mp = plotSigma( ax1, sigma * 100, rc_mega * 100, mp, 'c: $\sigma_M$ (%) at $' + str(warmingLev) + '^\circ$', prcTxtTmpl='% of pixel where $\|\Delta Q_M\| > \sigma_M$: {p:2.0f}%', sigmamax=25) warmingLev = 2.0 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax2 = plt.subplot(gs[0, 1]) pclChng, mp = plotRelChngDiff(ax2, rc_mega, mp, 'b: $\Delta Q_M$ at $' + str(warmingLev) + '^\circ$', vmax=25) #sigma_im = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) #sigmaT = getTimeSigmaGrossEnsemble(warmingLev, ncDir=ncDir) #sigma = np.sqrt(sigma_im**2. + sigmaT**2.) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) ax3 = plt.subplot(gs[1, 1]) pclSigma, mp = plotSigma( ax3, sigma * 100, rc_mega * 100, mp, 'd: $\sigma_M$ (%) at $' + str(warmingLev) + '^\circ$', prcTxtTmpl='% of pixel where $\|\Delta Q_M\| > \sigma_M$: {p:2.0f}%', sigmamax=25) cax1 = plt.subplot(gs[0, 2]) cb = plt.colorbar(pclChng, ax=ax2, cax=cax1) cb.set_label('$\Delta Q_M$ (%)') cax2 = plt.subplot(gs[1, 2]) cb = plt.colorbar(pclSigma, ax=ax3, cax=cax2) cb.set_label('$\sigma_M$ (%)') ax0.set_aspect('auto') ax1.set_aspect('auto') ax2.set_aspect('auto') ax3.set_aspect('auto') cax1.set_aspect('auto') cax2.set_aspect('auto') plt.tight_layout() f.savefig(outPng, dpi=300)
def plotGrossEnsembleChange(ncDir='/ClimateRun4/multi-hazard/eva'): outPng = 'wlRelChngGrossEnsembles.png' f = plt.figure(figsize=(9, 12)) gs = gridspec.GridSpec(3, 3, width_ratios=[1, 1, .05]) mp = None def writeSigmaRatioTxt(ax, sigma, relChng, varname): sigma_ratio = sigma / np.abs(relChng) percSign = float(np.nansum(sigma_ratio <= 1)) / np.nansum( np.logical_not(np.isnan(sigma_ratio))) prcTxtTmpl = '% of pixel where $\|{varname}\| > \sigma$: {p:2.0f}%' prcTxt = prcTxtTmpl.format(varname=varname, p=percSign * 100) #prcTxt = '% of pixel where $\|\Delta ' + varname + '\| > \sigma$: {p:2.0f}%'.format(p=percSign*100) plt.axes(ax) txtpos = mp(-24.3, 70.3) bb = {'boxstyle': 'square,pad=0', 'ec': 'none', 'fc': 'w'} plt.annotate(prcTxt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=10, bbox=bb) warmingLev = 1.5 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax00 = plt.subplot(gs[0, 0]) pcl, mp = plotRelChngDiff(ax00, rc_mega, mp, 'a: $\Delta Q_{H100}$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax00, sigma, rc_mega, '\Delta Q_{H100}') relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax10 = plt.subplot(gs[1, 0]) pcl, mp = plotRelChngDiff(ax10, rc_mega, mp, 'b: $\Delta Q_M$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax10, sigma, rc_mega, '\Delta Q_M') retPer = 15 rlVarName = 'rl_min' relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, rlVarName=rlVarName, retPer=retPer, nmodels=nmodels, threshold=.1) rc_mega = (rc_r8 + rc_r4) / 2. ax20 = plt.subplot(gs[2, 0]) pcl, mp = plotRelChngDiff(ax20, rc_mega, mp, 'c: $\Delta Q_{L15}$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax20, sigma, rc_mega, '\Delta Q_{L15}') warmingLev = 2.0 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax01 = plt.subplot(gs[0, 1]) pcl, mp = plotRelChngDiff(ax01, rc_mega, mp, 'd: $\Delta Q_{H100}$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax01, sigma, rc_mega, '\Delta Q_{H100}') relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl( ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4) / 2. ax11 = plt.subplot(gs[1, 1]) pcl, mp = plotRelChngDiff(ax11, rc_mega, mp, 'e: $\Delta Q_M$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax11, sigma, rc_mega, '\Delta Q_{H100}') retPer = 15 rlVarName = 'rl_min' relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadWlVsScenChange( ncDir=ncDir, warmingLev=warmingLev, rlVarName=rlVarName, retPer=retPer, nmodels=nmodels, threshold=.1) rc_mega = (rc_r8 + rc_r4) / 2. ax21 = plt.subplot(gs[2, 1]) pcl, mp = plotRelChngDiff(ax21, rc_mega, mp, 'f: $\Delta Q_{L15}$ at $' + str(warmingLev) + '^\circ$', vmax=50) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax21, sigma, rc_mega, '\Delta Q_M') cax00 = plt.subplot(gs[:, 2]) cb = plt.colorbar(pcl, ax=ax21, cax=cax00) cb.set_label('%', fontsize=13) cb.ax.tick_params(labelsize=11) sigma = np.nanstd(np.concatenate([rc_r8all, rc_r4all], 0), 0) writeSigmaRatioTxt(ax21, sigma, rc_mega, '\Delta Q_{L15}') ax00.set_aspect('auto') ax10.set_aspect('auto') ax20.set_aspect('auto') ax01.set_aspect('auto') ax11.set_aspect('auto') ax21.set_aspect('auto') cax00.set_aspect('auto') plt.tight_layout() f.savefig(outPng, dpi=300)
def plotGrossEnsembles_mean(ncDir='/ClimateRun4/multi-hazard/eva'): outPng = 'wlRelChngGrossEnsembles_mean.png' f = plt.figure(figsize=(9,12)) gs = gridspec.GridSpec(3, 3, width_ratios=[1,1,.05]) mp = None def writeSigmaRatioTxt(ax, sigma, relChng, varname): sigma_ratio = sigma/np.abs(relChng) percSign = float(np.nansum(sigma_ratio <= 1))/np.nansum(np.logical_not(np.isnan(sigma_ratio))) prcTxtTmpl = '% of pixel where $\|{varname}\| > \sigma$: {p:2.0f}%' prcTxt = prcTxtTmpl.format(varname=varname, p=percSign*100) plt.axes(ax) txtpos = mp(-24.3, 70.2) bb = {'boxstyle': 'square,pad=0', 'ec': 'none', 'fc': 'w'} plt.annotate(prcTxt, xy=txtpos, xycoords='data', xytext=txtpos, textcoords='data', fontsize=10, bbox=bb) warmingLev = 1.5 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl(ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4)/2. sigmaTot, sigmaWithin, sigmaBetween, pValue, effectSize = anovaAnalysis(relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all) ax0 = plt.subplot(gs[0,0]) pcl, mp = plotRelChngDiff(ax0, rc_mega, sigmaTot, mp, 'a: $\Delta Q_M$ at $' + str(warmingLev) +'^\circ$', vmax=25) printPosNegChanges(warmingLev, rc_mega) writeSigmaRatioTxt(ax0, sigmaTot, rc_mega, '\Delta Q_M') ax1 = plt.subplot(gs[1,0]) pcl, mp = plotSigma(ax1, sigmaWithin*100, rc_mega*100, mp, 'c: $\sigma_{within}$ (%) at $' + str(warmingLev) +'^\circ$', prcTxtTmpl = '', sigmamax=25) ax2 = plt.subplot(gs[2,0]) pcl, mp = plotSigma(ax2, sigmaBetween*100, rc_mega*100, mp, 'e: $\sigma_{between}$ (%) at $' + str(warmingLev) +'^\circ$', prcTxtTmpl = '', sigmamax=25) warmingLev = 2.0 relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all = ldEnsmbl.loadMeanChangesAtWl(ncDir=ncDir, warmingLev=warmingLev, nmodels=nmodels) rc_mega = (rc_r8 + rc_r4)/2. sigmaTot, sigmaWithin, sigmaBetween, pValue, effectSize = anovaAnalysis(relChngDiff, rc_r8, rc_r4, rc_r8all, rc_r4all) ax3 = plt.subplot(gs[0,1]) pclChng, mp = plotRelChngDiff(ax3, rc_mega, sigmaTot, mp, 'b: $\Delta Q_M$ at $' + str(warmingLev) +'^\circ$', vmax=30) printPosNegChanges(warmingLev, rc_mega) writeSigmaRatioTxt(ax3, sigmaTot, rc_mega, '\Delta Q_M') ax4 = plt.subplot(gs[1,1]) pclSigma, mp = plotSigma(ax4, sigmaWithin*100, rc_mega*100, mp, 'd: $\sigma_{within}$ (%) at $' + str(warmingLev) +'^\circ$', prcTxtTmpl = '', sigmamax=30) ax5 = plt.subplot(gs[2,1]) pclSigma, mp = plotSigma(ax5, sigmaBetween*100, rc_mega*100, mp, 'f: $\sigma_{between}$ (%) at $' + str(warmingLev) +'^\circ$', prcTxtTmpl = '', sigmamax=30) cax1 = plt.subplot(gs[0,2]) cb = plt.colorbar(pclChng, ax=ax2, cax=cax1) cb.set_label('$\Delta Q_M$ (%)') cax2 = plt.subplot(gs[1:,2]) cb = plt.colorbar(pclSigma, ax=ax3, cax=cax2) cb.set_label('$\sigma_M$ (%)') ax0.set_aspect('auto') ax1.set_aspect('auto') ax2.set_aspect('auto') ax3.set_aspect('auto') ax4.set_aspect('auto') ax5.set_aspect('auto') cax1.set_aspect('auto') cax2.set_aspect('auto') plt.tight_layout() f.savefig(outPng, dpi=300)