Metview's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

Download source and data


Curves with Different Y Scales Example
#  **************************** LICENSE START ***********************************
# 
#  Copyright 2020 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

# get data
use_mars = False # False or True
if use_mars:
    # retrieve data from MARS
    t_and_r = mv.retrieve(
        type     = 'fc',
        date     = 20201222,
        time     = 12,
        step     = [0, 'to', 240, 'by', 6],
        levelist = 1000,
        param    = ['t', 'r'],
        grid     = 'O48'
    )
    mv.write('t_and_r_ts.grib', t_and_r)
else:
    # read data from GRIB file
    t_and_r = mv.read("t_and_r_ts.grib")


# filter t and r into separate fieldsets
t = mv.read(data=t_and_r, param='t')
r = mv.read(data=t_and_r, param='r')


# extract arrays of values at the North Pole
loc = [90, 0]
tvals = mv.nearest_gridpoint(t, loc)
rvals = mv.nearest_gridpoint(r, loc)
ttimes = mv.valid_date(t)
rtimes = mv.valid_date(r)


# construct input visualisers with these x/y components
t_curve = mv.input_visualiser(
    input_x_type        = "date",
    input_date_x_values = ttimes,
    input_y_values      = tvals)

r_curve = mv.input_visualiser(
    input_x_type        = "date",
    input_date_x_values = rtimes,
    input_y_values      = rvals)


# set up a Cartesian view for each curve, as they will use
# different y-axis scales

haxis = mv.maxis(axis_type = "date",
                 axis_years_label_height = 0.4,
                 axis_months_label_height = 0.4,
                 axis_days_label_height = 0.4)

t_vertical_axis = mv.maxis(
    axis_orientation      = "vertical",
    axis_title_text       = "temperature",
    axis_title_height     = 0.4,
    axis_tick_label_hight = 0.4
    )

t_view = mv.cartesianview(
    x_automatic = "on",
    x_axis_type = "date",
    y_automatic = "on",
    vertical_axis = t_vertical_axis,
    horizontal_axis = haxis)


r_vertical_axis = mv.maxis(
    axis_orientation      = "vertical",
    axis_position         = "right",
    axis_title_text       = "relative humidity",
    axis_title_height     = 0.4,
    axis_tick_label_hight = 0.4
    )

r_view = mv.cartesianview(
    x_automatic = "on",
    x_axis_type = "date",
    y_automatic = "on",
    vertical_axis = r_vertical_axis,
    horizontal_axis = haxis)


# set up the pages that will use these views
p1 = mv.plot_page(view=t_view)
p2 = mv.plot_page(view=r_view)
dw = mv.plot_superpage(pages=[p1, p2])


# plotting attributes
common_graph = {'legend' : 'on',
                'graph_line_thickness' : 2,
                'graph_symbol' : 'on',
                'graph_symbol_colour' : 'charcoal'}
t_graph = mv.mgraph(common_graph, graph_line_colour='red', legend_user_text='t')
r_graph = mv.mgraph(common_graph, graph_line_colour='olive', legend_user_text='r')

# customise the legends
legend_common = {'legend_display_type' : 'disjoint',
                 'legend_text_font_size' : 0.5,
                 'legend_box_mode'       : "positional",
                 'legend_box_y_position' : 18.2,
                 'legend_box_x_length'   : 5,
                 'legend_box_y_length'   : 2
                 }
t_legend = mv.mlegend(legend_common, legend_box_x_position=10)
r_legend = mv.mlegend(legend_common, legend_box_x_position=15)

# Define the output plot file
mv.setoutput(mv.pdf_output(output_name='double_axis_2'))
	
# Plot the data curves into the different views 		
mv.plot(dw[0], t_curve, t_graph, t_legend, dw[1], r_curve, r_graph, r_legend)	
Curves with Different Y Scales Example
# Metview Macro

#  **************************** LICENSE START ***********************************
# 
#  Copyright 2020 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 ************************************

# get data
use_mars = 0 # 0 or 1
if use_mars then
    # retrieve data from MARS
    t_and_r = retrieve(
        type     : 'fc',
        date     : 20201222,
        time     : 12,
        step     : [0, 'to', 240, 'by', 6],
        levelist : 1000,
        param    : ['t', 'r'],
        grid     : 'O48'
    )
    write('t_and_r_ts.grib', t_and_r)
else
    # read data from GRIB file
    t_and_r = read("t_and_r_ts.grib")
end if


# filter t and r into separate fieldsets
t = read(data: t_and_r, param: 't')
r = read(data: t_and_r, param: 'r')


# extract arrays of values at the North Pole
loc = [90, 0]
tvals = nearest_gridpoint(t, loc)
rvals = nearest_gridpoint(r, loc)
ttimes = valid_date(t)
rtimes = valid_date(r)


# construct input visualisers with these x/y components
t_curve = input_visualiser(
    input_x_type        : "date",
    input_date_x_values : ttimes,
    input_y_values      : tvals)

r_curve = input_visualiser(
    input_x_type        : "date",
    input_date_x_values : rtimes,
    input_y_values      : rvals)


# set up a Cartesian view for each curve, as they will use
# different y-axis scales

haxis = mv.maxis(axis_type : "date",
                 axis_years_label_height : 0.4,
                 axis_months_label_height : 0.4,
                 axis_days_label_height : 0.4)

t_vertical_axis = maxis(
    axis_orientation      : "vertical",
    axis_title_text       : "temperature",
    axis_title_height     : 0.4,
    axis_tick_label_hight : 0.4
    )

t_view = cartesianview(
    x_automatic : "on",
    x_axis_type : "date",
    y_automatic : "on",
    vertical_axis : t_vertical_axis,
    horizontal_axis = haxis)


r_vertical_axis = maxis(
    axis_orientation      : "vertical",
    axis_position         : "right",
    axis_title_text       : "relative humidity",
    axis_title_height     : 0.4,
    axis_tick_label_hight : 0.4
    )

r_view = cartesianview(
    x_automatic : "on",
    x_axis_type : "date",
    y_automatic : "on",
    vertical_axis : r_vertical_axis,
    horizontal_axis = haxis)


# set up the pages that will use these views
p1 = plot_page(view : t_view)
p2 = plot_page(view : r_view)
dw = plot_superpage(pages : [p1, p2])


# plotting attributes
common_graph = ('legend' : 'on',
                'graph_line_thickness' : 2,
                'graph_symbol': 'on',
                'graph_symbol_colour' : 'charcoal')
t_graph = mgraph(common_graph, graph_line_colour : 'red', legend_user_text : 't')
r_graph = mgraph(common_graph, graph_line_colour : 'olive', legend_user_text : 'r')

# customise the legends
legend_common = (legend_display_type : 'disjoint',
                 legend_text_font_size : 0.5,
                 legend_box_mode       : "positional",
                 legend_box_y_position : 18.2,
                 legend_box_x_length   : 5,
                 legend_box_y_length   : 2
                 )
t_legend = mlegend(legend_common, legend_box_x_position: 10)
r_legend = mlegend(legend_common, legend_box_x_position: 15)

# Define the output plot file
setoutput(pdf_output(output_name : 'double_axis_2'))
	
# Plot the data curves into the different views 		
plot(dw[1], t_curve, t_graph, t_legend, dw[2], r_curve, r_graph, r_legend)	
  • No labels