예제 #1
0
def plot_pr_runoff_correlations(start_year=1980, end_year=2010, months=None):
    default_path = "/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl-intfl_ITFS.hdf5"
    # default_path = "/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl-intfl_ITFS_avoid_truncation1979-1989.hdf5"

    if months is None:
        months = list(range(1, 13))

    img_folder = os.path.join("interflow_corr_images",
                              os.path.basename(default_path))
    if not os.path.isdir(img_folder):
        os.makedirs(img_folder)

    img_filename = "PR_TRAF_TDRA_interflow_correlations_months={}_{}-{}.jpg".format(
        "-".join(str(m) for m in months), start_year, end_year)

    lons, lats, basemap = analysis.get_basemap_from_hdf(file_path=default_path)
    lons[lons > 180] -= 360
    x, y = basemap(lons, lats)

    # Correlate surface runoff and PR
    params = dict(path1=default_path,
                  varname1="PR",
                  level1=0,
                  path2=default_path,
                  level2=0,
                  varname2="TRAF",
                  months=months)

    params.update(dict(
        start_year=start_year,
        end_year=end_year,
    ))

    title_list = []
    data_list = []

    corr1, intf_clim, i1_clim = calculate_correlation_field_for_climatology(
        **params)
    to_plot1 = maskoceans(lons, lats, corr1)
    title_list.append("Corr({}, {})".format(params["varname1"],
                                            params["varname2"]))
    data_list.append(to_plot1)

    # correlate drainage and PR
    params.update(dict(varname2="TDRA", level2=0, varname1="PR", level1=0))
    corr4, i1_clim, av_clim = calculate_correlation_field_for_climatology(
        **params)
    to_plot3 = np.ma.masked_where(to_plot1.mask, corr4)
    title_list.append("Corr({}, {})".format(params["varname1"],
                                            params["varname2"]))
    data_list.append(to_plot3)

    # Do plotting
    clevels = np.arange(-1, 1.2, 0.2)

    npanels = len(data_list)
    gs = GridSpec(1, npanels + 1, width_ratios=[
        1.0,
    ] * npanels + [
        0.05,
    ])

    fig = plt.figure()
    assert isinstance(fig, Figure)
    fig.set_figheight(1.5 * fig.get_figheight())

    img = None
    for col in range(npanels):
        ax = fig.add_subplot(gs[0, col])
        basemap.drawmapboundary(fill_color="0.75", ax=ax)

        img = basemap.contourf(x,
                               y,
                               data_list[col],
                               levels=clevels,
                               cmap=cm.get_cmap("RdBu_r",
                                                len(clevels) - 1))
        plt.title(title_list[col])
        basemap.drawcoastlines(linewidth=cpp.COASTLINE_WIDTH, ax=ax)

    plt.colorbar(img, cax=fig.add_subplot(gs[0, npanels]))
    fig.savefig(os.path.join(img_folder, img_filename), dpi=cpp.FIG_SAVE_DPI)
예제 #2
0
def main(start_year=1980, end_year=2010, months=None, ylabel="",
         fig=None, current_row=0, gs=None):
    default_path = "/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl-intfl_ITFS.hdf5"
    # default_path = "/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl-intfl_ITFS_avoid_truncation1979-1989.hdf5"

    if months is None:
        months = list(range(1, 13))

    img_folder = os.path.join("interflow_corr_images", os.path.basename(default_path))
    if not os.path.isdir(img_folder):
        os.makedirs(img_folder)

    img_filename = "4x1_correlations_INTF-PR-I1-Infilt_months={}_{}-{}.png".format("-".join(str(m) for m in months),
                                                                                   start_year, end_year)

    lons, lats, basemap = analysis.get_basemap_from_hdf(file_path=default_path)
    lons[lons > 180] -= 360
    x, y = basemap(lons, lats)

    # Correlate interflow rate and soil moisture
    params = dict(
        path1=default_path,
        varname1="INTF",
        level1=0,

        path2=default_path,
        level2=0,
        varname2="I1",
        months=months
    )

    params.update(dict(
        start_year=start_year, end_year=end_year,
    ))

    title_list = []
    data_list = []

    corr1, intf_clim, i1_clim = calculate_correlation_field_for_climatology(**params)
    to_plot1 = maskoceans(lons, lats, corr1)
    # title_list.append("Corr({}, {})".format(
    # infovar.get_display_label_for_var(params["varname1"]),
    #     infovar.get_display_label_for_var(params["varname2"])))
    # data_list.append(to_plot1)

    # correlate interflow and precip
    params.update(dict(varname2="PR", level2=0))
    corr2, _, pr_clim = calculate_correlation_field_for_climatology(**params)
    to_plot2 = np.ma.masked_where(to_plot1.mask, corr2)
    title_list.append("Corr({}, {})".format(
        infovar.get_display_label_for_var(params["varname1"]),
        infovar.get_display_label_for_var(params["varname2"])))
    data_list.append(to_plot2)

    # correlate precip and soil moisture
    # params.update(dict(varname1="I1", level1=0))
    # corr3, _, _ = calculate_correlation_field_for_climatology(**params)
    # to_plot3 = np.ma.masked_where(to_plot2.mask, corr3)
    # title_list.append("Corr({}, {})".format(
    #     infovar.get_display_label_for_var(params["varname1"]),
    #     infovar.get_display_label_for_var(params["varname2"])))
    # data_list.append(to_plot3)

    # correlate interflow and infiltration
    # corr4 = calculate_correlation_of_infiltration_rate_with(start_year=start_year,
    #                                                         end_year=end_year,
    #                                                         path_for_infiltration_data=default_path,
    #                                                         path2=default_path,
    #                                                         varname2="INTF",
    #                                                         level2=0, months=months)

    # Correlate interflow rate with latent heat flux
    params = dict(
        path1=default_path,
        varname1="INTF",
        level1=0,

        path2=default_path,
        level2=0,
        varname2="AV",
        months=months,

        start_year=start_year, end_year=end_year,
    )

    corr4, _, _ = calculate_correlation_field_for_climatology(**params)
    to_plot4 = np.ma.masked_where(to_plot1.mask, corr4)
    title_list.append("Corr({}, {})".format(
        infovar.get_display_label_for_var(params["varname1"]),
        infovar.get_display_label_for_var(params["varname2"])))

    data_list.append(to_plot4)

    # Correlate interflow rate with soil ice
    params = dict(
        path1=default_path,
        varname1="INTF",
        level1=0,

        path2=default_path,
        level2=0,
        varname2="I2",
        months=months,

        start_year=start_year, end_year=end_year,
    )

    corr4, _, _ = calculate_correlation_field_for_climatology(**params)
    to_plot4 = np.ma.masked_where(to_plot1.mask, corr4)
    title_list.append("Corr({}, {})".format(
        infovar.get_display_label_for_var(params["varname1"]),
        infovar.get_display_label_for_var(params["varname2"])))

    data_list.append(to_plot4)

    # Correlate interflow rate with swe
    params = dict(
        path1=default_path,
        varname1="INTF",
        level1=0,

        path2=default_path,
        level2=0,
        varname2="I5",
        months=months,

        start_year=start_year, end_year=end_year,
    )

    corr4, _, _ = calculate_correlation_field_for_climatology(**params)
    to_plot4 = np.ma.masked_where(to_plot1.mask, corr4)
    title_list.append("Corr({}, {})".format(
        infovar.get_display_label_for_var(params["varname1"]),
        infovar.get_display_label_for_var(params["varname2"])))

    data_list.append(to_plot4)

    # Correlate LHF rate with swe
    params = dict(
        path1=default_path,
        varname1="AV",
        level1=0,

        path2=default_path,
        level2=0,
        varname2="I5",
        months=months,

        start_year=start_year, end_year=end_year,
    )

    corr4, _, _ = calculate_correlation_field_for_climatology(**params)
    to_plot4 = np.ma.masked_where(to_plot1.mask, corr4)
    title_list.append("Corr({}, {})".format(
        infovar.get_display_label_for_var(params["varname1"]),
        infovar.get_display_label_for_var(params["varname2"])))

    data_list.append(to_plot4)

    # Do plotting
    clevels = np.arange(-1, 1.2, 0.2)

    npanels = len(data_list)

    if gs is None:
        gs = GridSpec(1, npanels + 1, width_ratios=[1.0, ] * npanels + [0.05, ])

    is_subplot = fig is not None
    fig = plt.figure() if fig is None else fig
    assert isinstance(fig, Figure)
    # fig.set_figheight(1.5 * fig.get_figheight())

    img = None
    for col in range(npanels):

        ax = fig.add_subplot(gs[current_row, col])

        if not col:
            ax.set_ylabel(ylabel)

        basemap.drawmapboundary(fill_color="0.75", ax=ax)

        img = basemap.contourf(x, y, data_list[col], levels=clevels, cmap=cm.get_cmap("RdBu_r", len(clevels) - 1))
        if current_row == 0:
            ax.set_title(title_list[col])
        basemap.drawcoastlines(linewidth=cpp.COASTLINE_WIDTH, ax=ax)

    if not is_subplot:
        plt.colorbar(img, cax=fig.add_subplot(gs[0, npanels]))
        fig.savefig(os.path.join(img_folder, img_filename), dpi=cpp.FIG_SAVE_DPI)

    return img, img_folder