if scen != "RCP85":
            print rd(contrib, 50, printyr), "(", rd(contrib, 5, printyr), "to", rd(contrib, 95, printyr), ")",
        else:
            print rd(contrib, 50, printyr), "(", rd(contrib, 5, printyr), "to", rd(contrib, 95, printyr), ")"

#### total slr; sum up contributions first ####


def rdd(numb):
    # in mm
    return '%s' % float('%.4g' % numb)

print "total", ":",
for k, scen in enumerate(["RCP3PD", "RCP45", "RCP85", ]):
    total_slr = da.zeros_like(projection_data[scen]["thermexp"])
    for i, name in enumerate(contrib_ids):
        # sum up all contributions
        single_contrib = projection_data[scen][name]
        # if nans occur, clear these contributions
        # single_contrib[np.isnan(single_contrib)] = 0.
        total_slr += single_contrib

    di_total_slr = da.DimArray(total_slr, dims=["time", "runnumber"])
    di_total_slr -= di_total_slr[1986:2005, :].mean(axis="time")
    if isinstance(printyr, int):
        mn = di_total_slr[printyr, :] * 1.e3
    else:
        mn = di_total_slr[printyr, :].mean(axis="time") * 1.e3
    # mn = di_total_slr[2081:2100,:].mean(axis="time")
    low = np.percentile(mn, 5)
Пример #2
0
def fig4(projection_data):

    plot_period = np.arange(2000, 2101, 1)

    plt.subplots_adjust(left=0.1, bottom=0.1, right=1.0, top=0.97,
                        wspace=0.1, hspace=None)

    ax6 = plt.subplot(111)

    # ipcc ranges
    divider = make_axes_locatable(ax6)
    axy = divider.append_axes("right", size=0.8, pad=0.0, sharey=ax6)
    axy.axis("off")
    axy.axvspan(0, 10, facecolor='0.5', alpha=0.2, lw=0)
    total_contribs = {}
    xloc = 10
    oloc = 4

    for k, scen in enumerate(["RCP85", "RCP45", "RCP3PD"]):
        total_slr = da.zeros_like(projection_data[scen]["thermexp"])

        for i, name in enumerate(contrib_ids):
            # sum up all contributions
            single_contrib = projection_data[scen][name]
            total_slr += single_contrib

        contrib = total_slr - \
            total_slr[1986:2005, :].mean(axis=0)
        upper_perc = da.DimArray(np.percentile(contrib, 95, axis=1),
                                 axes=contrib.time, dims="time")
        lower_perc = da.DimArray(np.percentile(contrib, 5, axis=1),
                                 axes=contrib.time, dims="time")
        median = da.DimArray(np.percentile(contrib, 50, axis=1),
                             axes=contrib.time, dims="time")

        h = ax6.fill_between(
            plot_period,
            lower_perc[plot_period] * 1e3,
            upper_perc[plot_period] * 1e3,
            color=rcpcoldict[scen],
            alpha=.4,
            lw=0.5)
        ax6.plot(plot_period, median[plot_period] * 1e3, lw=3, color=rcpcoldict[scen],
                 alpha=1., label=rcpnamedict[scen])

        total_contribs[scen] = np.array(
            [median[2100], lower_perc[2100], upper_perc[2100]])

        oloc -= 1.
        xloc -= 1.
        low = lower_perc[2081:2100].mean() * 1.e3
        med = median[2081:2100].mean() * 1.e3
        upp = upper_perc[2081:2100].mean() * 1.e3
        axy.plot([oloc - 1, oloc + 1], [med, med],
                 lw=3, color=rcpcoldict[scen])
        axy.fill_between([oloc - 1, oloc + 1], [low, low],
                         [upp, upp], color=rcpcoldict[scen], alpha=.4, lw=0.)
        low, med, upp = ipcc.get_ipcc_range(scen, "mean_slr_2081_2100")
        axy.fill_between([xloc - 1, xloc + 1], [low, low],
                         [upp, upp], color=rcpcoldict[scen], alpha=.4, lw=0.)
        axy.plot([xloc - 1, xloc + 1], [med, med],
                 color=rcpcoldict[scen], lw=3, alpha=1.)
        axy.set_xlim(-1, 11)

    axy.text(1.5, 1200, "M16", rotation="vertical", horizontalalignment='center',
             verticalalignment='center')
    axy.text(7.5, 1200, "IPCC", rotation="vertical", horizontalalignment='center',
             verticalalignment='center')

    ax6.set_xlim(plot_period[0], plot_period[-1])
    ax6.set_xlabel("Time in years")
    ax6.set_ylabel("Sea level in mm")

    l1 = ax6.legend(ncol=1, loc="center left")
    l1.draw_frame(0)
    for l in l1.get_lines():
        l.set_alpha(1)