Metview's documentation is now on readthedocs!

Download source and data


Profile Plot with Double Axis 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 ************************************



# -------------------------------------------------------------------------
# Description: Demonstrates how to make a graph plot with two vertical axes
# -------------------------------------------------------------------------

# We will compute a vertical profile from a point in a data set
# that is on model levels. This will be plotted with model levels
# as the left-hand vertical axis, and computed pressure levels on the
# right-hand vertical axis.


lat_lon_point = [56.9, -2.6]

# read the input model level grib file and compute a profile curve from it
t_data = read(source: "fc_ml.grib", parameter:'t')

model_levels = grib_get_long(t_data, 'level')

iv1 = input_visualiser(
    input_x_values : nearest_gridpoint(t_data, lat_lon_point),
    input_y_values : model_levels
    )

dots = msymb(
    symbol_type         : "marker",
    symbol_outline      : "on",
    symbol_marker_index : 15
    )


# read the LNSP file and compute pressure levels for the input model levels
lnsp_data = read("lnsp.grib")

pressure_fields = pressure(lnsp_data, t_data)
pressure_levels = nearest_gridpoint(pressure_fields, lat_lon_point) / 100



# Construct two Cartesian views; the first will be plotted with data, the
# second will be plotted without data in order to plot just its vertical axis

# set up the main Cartesian view - it has a left-hand vertical axis
primary_vertical_axis = maxis(
    axis_orientation      : "vertical",
    axis_title_text       : "model levels",
    axis_title_height     : 0.5,
    axis_tick_label_hight : 0.5
    )

c1 = cartesianview(
    y_min         : maxvalue(vector(model_levels)), # larger level usually at bottom
    y_max         : minvalue(vector(model_levels)),
    x_min         : 180, # Kelvin
    x_max         : 320, # Kelvin
    vertical_axis : primary_vertical_axis
    )


# set up the secondary Cartesian view with a right-hand vertical axis
secondary_vertical_axis = maxis(
    axis_orientation      : "vertical",
    axis_position         : "right",
    axis_title_text       : "pres levels",
    axis_title_height     : 0.5,
    axis_tick_label_hight : 0.5
    )

# switch off the plotting of its horizontal axis
secondary_horizontal_axis = maxis(
    axis_line       : 'off',
    axis_tick       : 'off',
    axis_tick_label : 'off'
    )

c2 = cartesianview(
    y_min           : maxvalue(vector(pressure_levels)),
    y_max           : minvalue(vector(pressure_levels)),
    vertical_axis   : secondary_vertical_axis,
    horizontal_axis : secondary_horizontal_axis)


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


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

# plot the data into the first view, then plot the second view empty
plot(dw[1],iv1,dots,dw[2])
Profile Plot with Double Axis Example
# Metview 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

# -------------------------------------------------------------------------
# Description: Demonstrates how to make a graph plot with two vertical axes
# -------------------------------------------------------------------------

# We will compute a vertical profile from a point in a data set
# that is on model levels. This will be plotted with model levels
# as the left-hand vertical axis, and computed pressure levels on the
# right-hand vertical axis.


lat_lon_point = [56.9, -2.6]

# read the input model level grib file and compute a profile curve from it
t_data = mv.read(source="fc_ml.grib", parameter='t')

model_levels = mv.grib_get_long(t_data, 'level')

iv1 = mv.input_visualiser(
    input_x_values = mv.nearest_gridpoint(t_data, lat_lon_point),
    input_y_values = model_levels
    )

dots = mv.msymb(
    symbol_type         = "marker",
    symbol_outline      = "on",
    symbol_marker_index = 15
    )


# read the LNSP file and compute pressure levels for the input model levels
lnsp_data = mv.read("lnsp.grib")

pressure_fields = mv.pressure(lnsp_data, t_data)
pressure_levels = mv.nearest_gridpoint(pressure_fields, lat_lon_point)
pressure_levels = [x / 100 for x in pressure_levels] 


# Construct two Cartesian views; the first will be plotted with data, the
# second will be plotted without data in order to plot just its vertical axis

# set up the main Cartesian view - it has a left-hand vertical axis
primary_vertical_axis = mv.maxis(
    axis_orientation      = "vertical",
    axis_title_text       = "model levels",
    axis_title_height     = 0.5,
    axis_tick_label_hight = 0.5
    )

c1 = mv.cartesianview(
    y_min         = max(model_levels), # larger level usually at bottom
    y_max         = min(model_levels),
    x_min         = 180, # Kelvin
    x_max         = 320, # Kelvin
    vertical_axis = primary_vertical_axis
    )


# set up the secondary Cartesian view with a right-hand vertical axis
secondary_vertical_axis = mv.maxis(
    axis_orientation      = "vertical",
    axis_position         = "right",
    axis_title_text       = "pres levels",
    axis_title_height     = 0.5,
    axis_tick_label_hight = 0.5
    )

# switch off the plotting of its horizontal axis
secondary_horizontal_axis = mv.maxis(
    axis_line       = 'off',
    axis_tick       = 'off',
    axis_tick_label = 'off'
    )

c2 = mv.cartesianview(
    y_min           = max(pressure_levels),
    y_max           = min(pressure_levels),
    vertical_axis   = secondary_vertical_axis,
    horizontal_axis = secondary_horizontal_axis)


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


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

# plot the data into the first view, then plot the second view empty
mv.plot(dw[0],iv1,dots,dw[1])