Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Scroll pdf ignore
Panel
titleDownload
Expand
titleClick here for files to download...
Excerpt Include
A Quick Tour of Metview
A Quick Tour of Metview
nopaneltrue

Attachments
uploadfalse
oldfalse
patterns*.tar.gz,*.grib,*.grb
sortByname

Overview

In addition to geographic map plots, Metview can also generate XY plots including time series.

The possible ways to provide data for graph plotting are:

...

Create a new Input Visualiser icon. Set Input Plot Type to XYPoints and type a list of values (forward slash-delimited) for both Input X Values and Input Y Values (they should have the same number of elements). So the first number from Input X Values together with the first number from Input Y Values form one point in the graph, and so on.

Visualise the icon to get a basic plot of the data. You can drop a customised Symbol Plotting icon into the Display Window to change the numbers into markers. If you wish to have a plot where the individual points are coloured according to some value, set Input Values to a list of numbers. Then an appropriate Symbol Plotting icon will colour the markers.

Also try dropping a Graph Plotting icon to get connecting lines between the points. Try changing the plot type to a bar chart using the Graph Plotting icon.

Notice that the automatically-generated view fits your data so that the 'edge points' are on the axes.

...

Now create another one called v_axis and make it the vertical axis:

Axis OrientationVertical

Customise this similarly.

...

You should now be able to change the data values at the top of the macro, and the plot should still look ok.

Plotting a Time Series

XXXXXXImage Added

We will now extract data values from a particular location for different times and plot as a time series graph. It will be a Macro-based exercise, so create a new Macro icon, rename it time_series and go through the steps below.

...

Now extract the dates and times of the fields and combine them into a list of date variables. There is more than one way to organise this code, but here is one suggestion:

Code Block
languagepy
# obtain two lists - one of dates and one of times
d = grib_get_long(fs, 'validityDate')
t = grib_get_long(fs, 'validityTime')

# times are in hours, like 1200 is 12:00, so we have to divide by 100
# to get them into hours, then by 24 to get them into fractions of days
dates = d + (t / 2400 ) # ASSUME the times are in hours, like 1200 is 12:00
print(dates)

# but these are still numbers - we need to all the date() function to convert
# into proper date variables, and we need to loop through the list
date_list = nil
loop dt in dates
    date_list = date_list & [date(dt)]
end loop
print(date_list)valid_date(fs)
print(dates)

Now construct an Input Visualiser icon which you will drop into the Macro Editor: ensure that the Input X Type is set to type Date and enter some dummy values so that useful Macro code generated. Replace In the macro, replace the values of input_date_x_values and input_y_values with your lists of data. 

Plot In your macro, plot the Input Visualiser variable to get your time series plot. Use the Macro code for a Graph Plotting icon to connect the points with blue lines. If you have time at the end, you can customise the plot further.

Now duplicate the bulk of the code (change some variable names!) in order to additionally plot the time series for the data stored in t2m_analysis.grib, with the points connected by red lines. The plotting part can be done either with an additional plot() command, or else by adding the new Input Visualiser and Graph Plotting code to the end of the existing plot() command.

Info

In Organising Macros we will see how to put similar code into functions in order to reduce duplication of code.

Plotting onto a Map

Image Added

All of the icons (and their Macro equivalent functions) which plot graph data to an X/Y (Cartesian) axis can also plot graph data onto a map using lat/lon coordinates. As an example, we will plot a box which bounds a simple geographical region.

We will do this in two different ways; first, using the Input Visualiser.

Marking an area using Input Visualiser

Create a new Input Visualiser icon and set Input Plot Type to Geo Points. We want to define 4 lines, therefore we need a list of 5 points to connect together in order to create a closed box.

You can choose your own coordinates, or use these: top latitude = 65, bottom latitude = 51, left longitude = -5, right longitude = 26. Set Input Longitude Values and Input Latitude Values to each be a list of 5 numbers which will describe the four corners (and repeat the first). When you drop a Graph Plotting icon into the plot, the points should be connected into a rectangle (if this is not the case, check the ordering of your points!). This can be a simple way or marking an area on a map. You can have as many points as you wish, and therefore have more complex polygons. You could also read polygons from a file and plot them on the map using some Macro code - an example of this will be see in Case study: Plotting the Track of Hurricane Sandy.

Depending on what you want, this method has a limitation - the lines do not follow the projection of the view; they are just straight lines on the screen (see the images above). This is fine in cylindrical projection, but not in many others. Try plotting the lines in a polar stereographic Geographical View.

Marking an area using mvl_geoline

Macro has a function called mvl_geoline() which simply splits a geographic line into smaller parts which will follow any view projection.

Panel

definition mvl_geoline(lat1 : number, lon1 : number, lat2 : number, lon2 : number,  incrm : number)

The first four parameters define the end-points of the line. Parameter incrm specifies the increment, in degrees, into which the line should be split.

 

Create a new Macro icon and set up the coordinates of the box, for example:

Code Block
languagepy
toplat   = 65
botlat   = 51
leftlon  = -5
rightlon = 26

Define the first line of the box like this:

Code Block
languagepy
increment = 0.1
line1 = mvl_geoline(toplat, leftlon,  toplat, rightlon, increment)

Now finish off the box with the remaining 3 lines. They can then all be put into the plot() command like this, with an optional Graph Plotting visdef defined somewhere in the macro:

Code Block
languagepy
 plot(line1, line2, line3, line4, red_line)

Run the macro and drop a polar stereographic view into the Display Window to see the difference from the previous version.

An alternative is to combine the lines into a list before passing it to the plot() command:

Code Block
languagepy
to_plot = [line1, line2, line3, line4]
plot(to_plot, red_line)

Extra Work

Customise the time series plot:

Image Added

  • put some extra space around the data points - add a day to each end of the x axis using a custom Cartesian View
  • add a useful legend indicating that the blue line is the 24h forecast data and the red line is the analysis data

Logarithmic scales

Image Added

Create an X/Y plot similar to the first one from this session. Make sure there are some large y-values (e.g. 100, 1000). Set up a Cartesian View icon with Y Axis Type = Logarithmic to view your data

...

differently. Logarithmic Y axes are often used when representing the atmospheric levels.

Scatterplot

Image Added

Plot the analysis values on the x-axis and the forecast values on the y-axis. Add a diagonal line.

Geo boxes side-by-side

Write a macro which creates a 2-page layout similar to the image under "Plotting onto a Map". Use the two different box-drawing techniques, one in each page. Ensure they use the same variables to define the bounds of the box.