コード例 #1
0
ファイル: diagnose_point.py プロジェクト: jiaojiashuang/RPN
def plot_swe_timeseries(ax, crcm5_manager, areas2d, model_data, mask=None):
    swe_obs_manager = SweDataManager(var_name="SWE")

    assert isinstance(crcm5_manager, Crcm5ModelDataManager)
    assert isinstance(ax, Axes)

    if mask is None:
        i_model0, j_model0 = model_data.metadata["ix"], model_data.metadata[
            "jy"]
        mask = crcm5_manager.get_mask_for_cells_upstream(i_model0, j_model0)

    #print model_data.time[0], model_data.time[-1]

    #time window, inclusive
    start_date = model_data.time[0]
    end_date = model_data.time[-1]

    ts_swe_mod = crcm5_manager.get_monthly_means_over_points(
        mask, "I5", areas2d=areas2d, start_date=start_date, end_date=end_date)

    #cruManager = CRUDataManager(path="data/cru_data/CRUTS3.1/cru_ts_3_10.1901.2009.pre.dat.nc", var_name="pre")
    ts_swe_obs = swe_obs_manager.get_monthly_timeseries_using_mask(
        mask,
        crcm5_manager.lons2D,
        crcm5_manager.lats2D,
        areas2d,
        start_date=model_data.time[0],
        end_date=model_data.time[-1])

    mod = np.array(ts_swe_mod.data) / 1000.0  #convert to m * m^2
    sta = np.array(ts_swe_obs.data) / 1000.0  #convert to m * m^2

    print(min(mod), max(mod))
    print(min(sta), max(sta))

    ax.annotate("r = {0:.2f}".format(float(np.corrcoef([mod, sta])[0, 1])),
                xy=(0.1, 0.8),
                xycoords="axes fraction",
                zorder=5)
    ax.plot(ts_swe_mod.time, (mod - sta), color="k", linewidth=2)
    ax.plot(ts_swe_mod.time, mod, color="b")
    ax.plot(ts_swe_mod.time, sta, color="r")

    ax.xaxis.set_major_formatter(DateFormatter("%y/%m"))
    ax.xaxis.set_major_locator(MonthLocator(bymonth=list(range(1, 13, 2))))

    ax.set_title("CRCM5 versus Analysis (Ross Brown)")
    ax.set_ylabel("SWE, m^3, SWEmod - SWEobs")