Metview's documentation is now on readthedocs!

Download source and data


Model-Obs Difference Example
# Title: Model-Obs difference

#  **************************** LICENSE START ***********************************
# 
#  Copyright 2018 ECMWF. This software is distributed under the terms
#  of the Apache License version 2.0. In applying this license, ECMWF does not
#  waive the privileges and immunities granted to it by virtue of its status as
#  an Intergovernmental Organization or submit itself to any jurisdiction.
# 
#  ***************************** LICENSE END ************************************




use_mars = 0
if use_mars then
    # retrieve model data for 2m temperature (GRIB)
    t2m_fc48 = retrieve(
        type    : "fc",
        levtype : "sfc",
        param   : "2t",
        date    : -5,
        step    : 48,
        grid    : "o1280")

    # retrieve obs data (BUFR)
    synop = retrieve(
        type   : "ob",
        repres : "bu",
        date   : -3)
else
    t2m_fc48 = read('t2m_fc48.grib')
    synop = read('t2m_obs.bufr')
end if

# filter just the 2m temperature from the obs data (Geopoints)
synop_t2m = obsfilter(
    output    : "geopoints",
    parameter : "012004",
    data      : synop)

# compute the difference
diff = t2m_fc48 - synop_t2m

# define the graphical symbol plotting style
max_diff = maxvalue(abs(diff))

diff_symb = msymb(
    legend                               : "on",
    symbol_type                          : "marker",
    symbol_table_mode                    : "advanced",
    symbol_outline                       : "on",
    symbol_outline_colour                : "charcoal",
    symbol_advanced_table_selection_type : "list",
    symbol_advanced_table_level_list     : [-max_diff,-10,-5,-1,0,1,5,10,max_diff],
    symbol_advanced_table_colour_method  : "list",
    symbol_advanced_table_colour_list    : ["blue","sky","rgb(0.82,0.85,1)","white","white","rgb(0.9,0.8,0.8)","rgb(0.9,0.45,0.45)","red"],
    symbol_advanced_table_height_list    : [0.6,0.5,0.4,0.3,0.3,0.4,0.5,0.6]
    )

# shaded land and sea to make the points stand out more
grey_land_sea_shading = mcoast(
    map_coastline_land_shade        : "on",
    map_coastline_land_shade_colour : "RGB(0.89,0.89,0.89)",
    map_coastline_sea_shade         : "on",
    map_coastline_sea_shade_colour  : "grey",
    map_grid_latitude_increment     : 20,
    map_grid_longitude_increment    : 40,
    map_grid_colour                 : "charcoal"
    )

# use numpy to give us some statistics to put in the title
# - we could also have done this with Metview functions
vals = values(diff)
title = mtext(
    text_line_1 : 'Min = '  & minvalue(vals) &
                 ' Mean = ' & mean(vals) &
                 ' Max = '  & maxvalue(vals),
    text_font_size : 0.4)

# adjust the legend
legend = mlegend(legend_text_font_size : 0.35)

# set the view area
view = geoview(
    map_area_definition : "corners",
    area                : [30,-28,75,48],
    coastlines          : grey_land_sea_shading)

# define the output plot file
setoutput(pdf_output(output_name : 'model_obs_diff_plot'))

# plot the data with the style
plot(view, diff, diff_symb, title, legend)

Model-Obs Difference Example
# Title: Model-Obs difference

#  **************************** LICENSE START ***********************************
# 
#  Copyright 2018 ECMWF. This software is distributed under the terms
#  of the Apache License version 2.0. In applying this license, ECMWF does not
#  waive the privileges and immunities granted to it by virtue of its status as
#  an Intergovernmental Organization or submit itself to any jurisdiction.
# 
#  ***************************** LICENSE END ************************************

import metview as mv
import numpy as np

use_mars = 0
if use_mars:
    # retrieve model data for 2m temperature (GRIB)
    t2m_fc48 = mv.retrieve(
        type    = "fc",
        levtype = "sfc",
        param   = "2t",
        date    = -5,
        step    = 48,
        grid    = "o1280")

    # retrieve obs data (BUFR)
    synop = mv.retrieve(
        type   = "ob",
        repres = "bu",
        date   = -3)
else:
    t2m_fc48 = mv.read("t2m_fc48.grib")
    synop = mv.read("t2m_obs.bufr")


# filter just the 2m temperature from the obs data (Geopoints)
synop_t2m = mv.obsfilter(
    output    = "geopoints",
    parameter = "012004",
    data      = synop)

# compute the difference
diff = t2m_fc48 - synop_t2m

# define the graphical symbol plotting style
max_diff = mv.maxvalue(mv.abs(diff))

diff_symb = mv.msymb(
    legend                               = "on",
    symbol_type                          = "marker",
    symbol_table_mode                    = "advanced",
    symbol_outline                       = "on",
    symbol_outline_colour                = "charcoal",
    symbol_advanced_table_selection_type = "list",
    symbol_advanced_table_level_list     = [-max_diff,-10,-5,-1,0,1,5,10,max_diff],
    symbol_advanced_table_colour_method  = "list",
    symbol_advanced_table_colour_list    = ["blue","sky","rgb(0.82,0.85,1)","white","white","rgb(0.9,0.8,0.8)","rgb(0.9,0.45,0.45)","red"],
    symbol_advanced_table_height_list    = [0.6,0.5,0.4,0.3,0.3,0.4,0.5,0.6]
    )

# shaded land and sea to make the points stand out more
grey_land_sea_shading = mv.mcoast(
    map_coastline_land_shade        = "on",
    map_coastline_land_shade_colour = "RGB(0.89,0.89,0.89)",
    map_coastline_sea_shade         = "on",
    map_coastline_sea_shade_colour  = "grey",
    map_grid_latitude_increment     = 20,
    map_grid_longitude_increment    = 40,
    map_grid_colour                 = "charcoal"
    )

# use numpy to give us some statistics to put in the title
# - we could also have done this with Metview functions
vals = mv.values(diff)
title = mv.mtext(
    text_line_1 = 'Min = '  + format(np.amin(vals), '.2f') +
                 ' Mean = ' + format(np.mean(vals), '.2f') +
                 ' Max = '  + format(np.amax(vals), '.2f'),
    text_font_size = 0.4)

# adjust the legend
legend = mv.mlegend(legend_text_font_size = 0.35)

# set the view area
view = mv.geoview(
    map_area_definition = "corners",
    area                = [30,-28,75,48],
    coastlines          = grey_land_sea_shading)

# define the output plot file
mv.setoutput(mv.pdf_output(output_name = 'model_obs_diff_plot'))

# plot the data with the style
mv.plot(view, diff, diff_symb, title, legend)