예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)