Example #1
0
    def build_xs(self, data):
        if data:
            if not isinstance(data, list):
                data = [data]

            lines = []
            for d in data:
                line = d.label
                # print(f"label={d.label}")
                param = d.ds_param_info
                if param is not None:
                    # print(f"meta={param.meta}")
                    line += f" Par: {param.name}"
                    meta = param.meta
                    if meta.get("mars.type", "") == "an":
                        pass
                    else:
                        r = meta.get("date", 0)
                        h = meta.get("time", 0)
                        s = meta.get("step", "")
                        line += f" Run: {r} {h} UTC Step: +{s}h"
                lines.append(line)

            return mv.mtext(text_lines=lines, text_font_size=self.font_size)

        return mv.mtext(text_font_size=self.font_size)
Example #2
0
    def build_stamp(self, data, member=""):
        if data:
            if not isinstance(data, list):
                data = [data]

            # exp_conf = data[0].experiment
            label = data[0].label

            member_txt = ""
            if member:
                if member == "0":
                    member_txt = "CF"
                else:
                    member_txt = f"PF {member}"

            return mv.mtext(
                {
                    "text_line_1": f"""{label} {member_txt} Step: +<grib_info key='step'/>h Valid: <grib_info key='valid-date' format='%Y-%m-%d %H'/>""",
                    "text_font_size": self.font_size,
                }
            )

        return mv.mtext(
            {
                "text_font_size": self.font_size,
            }
        )
def plot_obs_freq(predictor_matrix, code):
    coastline = mv.mcoast(map_coastline_thickness=2,
                          map_boundaries="on",
                          map_coastline_colour="chestnut")
    symbol = mv.msymb(
        legend="on",
        symbol_type="marker",
        symbol_table_mode="on",
        symbol_outline="on",
        symbol_min_table=[1, 2, 5, 10, 15, 20, 25, 30],
        symbol_max_table=[2, 5, 10, 15, 20, 25, 30, 100000],
        symbol_colour_table=[
            "RGB(0.7020,0.7020,0.7020)",
            "RGB(0.4039,0.4039,0.4039)",
            "blue",
            "RGB(0.4980,1.0000,0.0000)",
            "RGB(1.0000,0.8549,0.0000)",
            "orange",
            "red",
            "magenta",
        ],
        symbol_marker_table=15,
        symbol_height_table=0.3,
    )

    legend = mv.mlegend(
        legend_text_font="arial",
        legend_text_font_size=0.35,
        legend_entry_plot_direction="row",
        legend_box_blanking="on",
        legend_entry_text_width=50,
    )

    title = mv.mtext(
        text_line_count=4,
        text_line_1=
        "OBS Frequency",  # To sostitute with "FE" values when relevant.
        text_line_2=f"WT Code = {code}",
        text_line_4=" ",
        text_font="arial",
        text_font_size=0.4,
    )

    df = predictor_matrix[["LonOBS", "LatOBS", "OBS"]]
    grouped_df = df.groupby(["LatOBS", "LonOBS"], as_index=False).count()

    geo = mv.create_geo(len(grouped_df), "xyv")
    geo = mv.set_latitudes(geo, grouped_df["LatOBS"].to_numpy(dtype=np.float))
    geo = mv.set_longitudes(geo, grouped_df["LonOBS"].to_numpy(dtype=np.float))
    geo = mv.set_values(geo, grouped_df["OBS"].to_numpy(dtype=np.float))

    with NamedTemporaryFile(delete=False, suffix=".pdf") as pdf:
        pdf_obj = mv.pdf_output(output_name=pdf.name.replace(".pdf", ""))
        mv.setoutput(pdf_obj)

        mv.plot(coastline, symbol, legend, title, geo)
        return pdf.name
def plot_std(predictor_matrix, code):
    coastline = mv.mcoast(map_coastline_thickness=2,
                          map_boundaries="on",
                          map_coastline_colour="chestnut")

    symbol = mv.msymb(
        legend="on",
        symbol_type="marker",
        symbol_table_mode="on",
        symbol_outline="on",
        symbol_min_table=[0, 0.0001, 0.5, 1, 2, 5],
        symbol_max_table=[0.0001, 0.5, 1, 2, 5, 1000],
        symbol_colour_table=[
            "RGB(0.7020,0.7020,0.7020)",
            "RGB(0.2973,0.2973,0.9498)",
            "RGB(0.1521,0.6558,0.5970)",
            "RGB(1.0000,0.6902,0.0000)",
            "red",
            "RGB(1.0000,0.0000,1.0000)",
        ],
        symbol_marker_table=15,
        symbol_height_table=0.3,
    )

    legend = mv.mlegend(
        legend_text_font="arial",
        legend_text_font_size=0.35,
        legend_entry_plot_direction="row",
        legend_box_blanking="on",
        legend_entry_text_width=50,
    )

    error = "FER" if "FER" in predictor_matrix.columns else "FE"

    title = mv.mtext(
        text_line_count=4,
        text_line_1=f"{error} Standard Deviation",
        text_line_2=f"WT Code = {code}",
        text_line_4=" ",
        text_font="arial",
        text_font_size=0.4,
    )

    df = predictor_matrix[["LonOBS", "LatOBS", error]]
    grouped_df = df.groupby(["LatOBS", "LonOBS"])[error].mean().reset_index()

    geo = mv.create_geo(len(grouped_df), "xyv")
    geo = mv.set_latitudes(geo, grouped_df["LatOBS"].to_numpy(dtype=np.float))
    geo = mv.set_longitudes(geo, grouped_df["LonOBS"].to_numpy(dtype=np.float))
    geo = mv.set_values(geo, grouped_df[error].to_numpy(dtype=np.float))

    with NamedTemporaryFile(delete=False, suffix=".pdf") as pdf:
        pdf_obj = mv.pdf_output(output_name=pdf.name.replace(".pdf", ""))
        mv.setoutput(pdf_obj)

        mv.plot(coastline, symbol, legend, title, geo)
        return pdf.name
Example #5
0
    def build(self, data, font_size=None):
        font_size = self._make_font_size(font_size)
        label = ""
        if data:
            if not isinstance(data, list):
                data = [data]

            lines = []
            lines = {"text_line_count": len(data)}
            for i, d_item in enumerate(data):
                # print(f"d_item={d_item}")
                if isinstance(d_item, tuple):
                    d = d_item[0]
                    data_id = d_item[1]
                else:
                    d = d_item
                    data_id = None

                param = d.ds_param_info
                if param is not None:
                    if param.meta.get("typeOfLevel", "") == "surface":
                        # lines.append(self.build_surface_fc(d.experiment.label, d.param.name, condition=cond))
                        lines[f"text_line_{i+1}"] = self.build_surface_fc(
                            d.label, param.name, data_id=data_id
                        )
                    else:
                        # lines.append(self.build_upper_fc(d.experiment.label, d.param.name, condition=cond))
                        lines[f"text_line_{i+1}"] = self.build_upper_fc(
                            d.label, param.name, data_id=data_id
                        )

            # print(f"line={lines}")
            # return mv.mtext(text_lines=lines, text_font_size=font_size)
            return mv.mtext(**lines, text_font_size=font_size)

        return mv.mtext(
            {
                "text_line_1": f"""{label} Par: <grib_info key='shortName'/> Lev: <grib_info key='level'/> (<grib_info key='levelType'/>) Step: +<grib_info key='step'/>h Valid: <grib_info key='valid-date' format='%Y-%m-%d %H'/>""",
                "text_font_size": font_size,
            }
        )
def plot_avg(predictor_matrix, code):
    coastline = mv.mcoast(map_coastline_thickness=2,
                          map_boundaries="on",
                          map_coastline_colour="chestnut")

    symbol = mv.msymb(
        legend="on",
        symbol_type="marker",
        symbol_table_mode="on",
        symbol_outline="on",
        symbol_min_table=[-1, -0.25, 0.25, 2],
        symbol_max_table=[-0.025, 0.25, 2, 1000],
        symbol_colour_table=[
            "RGB(0.0000,0.5490,0.1882)",
            "black",
            "RGB(1.0000,0.6902,0.0000)",
            "red",
        ],
        symbol_marker_table=15,
        symbol_height_table=0.3,
    )

    legend = mv.mlegend(
        legend_text_font="arial",
        legend_text_font_size=0.35,
        legend_entry_plot_direction="row",
        legend_box_blanking="on",
        legend_entry_text_width=50,
    )

    error = "FER" if "FER" in predictor_matrix.columns else "FE"

    title = mv.mtext(
        text_line_count=4,
        text_line_1=f"{error} Mean",
        text_line_2=f"WT Code = {code}",
        text_line_4=" ",
        text_font="arial",
        text_font_size=0.4,
    )

    df = predictor_matrix[["LonOBS", "LatOBS", error]]
    grouped_df = df.groupby(["LatOBS", "LonOBS"])[error].mean().reset_index()

    geo = mv.create_geo(len(grouped_df), "xyv")
    geo = mv.set_latitudes(geo, grouped_df["LatOBS"].to_numpy(dtype=np.float))
    geo = mv.set_longitudes(geo, grouped_df["LonOBS"].to_numpy(dtype=np.float))
    geo = mv.set_values(geo, grouped_df[error].to_numpy(dtype=np.float))

    return plot_geo(geo, coastline, symbol, legend, title)
Example #7
0
def test_definitions():
    mcont_def = mv.mcont({'legend': True})
    msymb_def = mv.msymb({'symbol_type': 'marker'})
    mcoast_def = mv.mcoast({'map_coastline_land_shade': True})
    mobs_def = mv.mobs({'obs_temperature': False})
    mtext_def = mv.mtext({'text_font_size': '0.80'})
    geoview_def = mv.geoview({'map_projection': 'polar_stereographic'})
    ps_output_def = mv.ps_output({'output_name': 'test'})
    assert mcont_def['LEGEND'] == 'ON'
    assert msymb_def['SYMBOL_TYPE'] == 'MARKER'
    assert mcoast_def['MAP_COASTLINE_LAND_SHADE'] == 'ON'
    assert mobs_def['OBS_TEMPERATURE'] == 'OFF'
    assert mtext_def['TEXT_FONT_SIZE'] == 0.8
    assert geoview_def['MAP_PROJECTION'] == 'POLAR_STEREOGRAPHIC'
    assert ps_output_def['OUTPUT_NAME'] == 'test'