Case description

In this exercise we will use Metview to produce the plots shown above:

We will work both interactively with icons and write Macro code. First, we will create the two plots independently then align them together in the same page.

This exercise involves:

  • reading and visualising GRIB and CSV data
  • plotting text labels with Symbol Plotting
  • plotting curves on maps and xy-views
  • using the date functions in Macro
  • performing fieldset computations in Macro

Creating the map plot

Setting the View

With a new Geographical View icon, set up a cylindrical projection with its area defined as

South/West/North/East: 17/-97/51/-45

Set up a new Coastlines icon with the following:

Plotting the Mean Sea Level Pressure field

Plot the GRIB file sandy_msl.grib into your view using a new Contouring icon. Plot black isolines with an interval of 5 hPa between them. Animate through the fields to see how the forecast is evolving.

The fields you visualised were taken from the model run at 2012-10-27 0UTC and containing 12 hourly forecast steps from 0 to 120 hours.

Plotting the storm track

The storm track data is stored in the CSV file called sandy_track.txt. If you open this file you will see that it contains the date, time and geographical coordinates of the track points.

Create a new Table Visualiser icon and set it to visualise your CSV file:

Now drag your Table Visualiser icon the plot to overlay the pressure forecast with the track.

Customising the storm track

The storm track in its current form needs some customisation. Use a Graph Plotting icon for it by setting the

Plotting date/time labels onto the track

To finalise the track plot we will add the date/time labels to the track points. This could be done with a Symbol Plotting icon by specifying the list of labels we want to plot into the map. However, to make it reusable for other datasets as well, we will do it programmatically by using Metview Macro.

Create a new Macro and edit it. First, read the CSV file in with the Table Reader:

tbl = read_table(
	table_delimiter	:	" ",
	table_combine_delimiters	:	"on",
	table_header_row	:	0,
	table_filename	:	"sandy_track.txt"
	)

As you can see we specified the table delimiters exactly in the same way as we did for the Table Visualiser icon.

In the code above, the object referenced by variable tbl contains all the columns from the CSV file. Now read the date and time (from the first two columns) into separate vectors:

val_date=values(tbl,1)
val_time=values(tbl,2)

Next, we build the list of labels. Each label is made up from a day and an hour part separated by a slash. We convert the date into a string and then take the last two characters to get the day. Use this loop to construct the list of labels:

labels=nil

for i=1 to count(val_date) do
    dPart = substring(string(val_date[i]),7,8)
    tPart = val_time[i]
    label =  "   " & dPart & "/" & tPart
    labels = labels & [label]
end for

Next, define a Symbol Plotting visual definition using the text mode.

Symbol Plotting in text mode is used to plot string values to the positions of the dataset it is applied to. The rule is that the first string in the list defined by symbol_text_list goes to the first data position, the second one to the second position and so on.

The code we need to add is like this:

sym = msymb(
	symbol_type	:	"text",
	symbol_text_font_colour : "black",
	symbol_text_font_size: "0.3",
	symbol_text_font_style: "bold",
	symbol_text_list	:	labels	
	)

We finish the macro by returning our Visual Definition.

return sym

By returning the visual definition our Macro behaves as if it were a real Symbol Plotting icon.

Save the Macro and drag it into the plot to see the labels appearing along the track.

Creating the graph plot

Setting the View

With a new Cartesian View icon, set up a view to cater for the graph showing the mean sea level pressure values in hPa units by setting

Computing the minimum pressure along the track

Since this task is fairly complex we will use a Macro for it. The idea goes like this:

Create new Macro and edit it. First, read the CSV file in the very same way as before. However, this time, on top of date and time, we also need to read latitude and longitude into vectors:

val_lon=values(tbl,3)
val_lat=values(tbl,4)

Next, read in the GRIB file containing the mean sea level forecast:

g=read("sandy_mslp.grib")

The curve data requires two lists: one for the dates and one for the values. First we initialise these lists:

trVal = nil
trDate = nil

Now the main part of the macro follows: we will loop through the track points and build the curve dataset. We will use a loop like this:

for i=1 to count(val_date) do

      ... your code will go here ...

end for

Within the loop first construct an area of e.g. 10 degrees wide centred on the current track point.

Remember an area is a list of South/West/North/East values. The coordinates of the current track point  are val_lat[i] and val_lon[i].

Next, read the forecast data for the current forecast step and the area you defined (supposing your area is called wbox):

p=read(
		data: g,
		step: (i-1)*12,
		area : wbox
		)

Here we used the fact the forecasts steps are stored in hours units in the GRIB file.

Next, compute the minimum of the field in the subarea using the minval() macro function:

pmin=minvalue(p)

Finally, build the list for the values (scaling Pa units stored in the GRIB to hPa units):

trVal= trVal & [pmin/100]

And also build the list of dates:

dt = date(val_date[i]) + hour(val_time[i])
trDate = trDate & [dt]

Having finished the body of the loop the last step in our Macro is to define an Input Visualiser and return it. The code we need to add is like this:

vis = input_visualiser (
    input_x_type        : "date",
    input_date_x_values : trDate,
    input_y_values      : trVal
)   

return vis 

By returning the visualiser our Macro behaves as if it were an Input Visualiser icon.

Customising the graph

Customise the graph with a Graph Plotting icon by setting the

Creating a title

Define a custom title as shown in the example plot with a new Text Plotting icon.

Putting it all together

With a new Display Window icon design an A4 portrait layout with two views: your Geographical View icon should go top and your Cartesian View icon into the bottom. Now visualise this icon and populate the views with the data.

Extra Work

Adding new curves to the x-y plot

On top of the minimum pressure try to add the maximum and average pressure to the graph plot.  Use a different colour to each curve and add a custom legend as well.

Hints:

return [vis,graph]

If you visualise the Macro your Graph Plotting settings will be directly applied to the resulting curve.

return [vis,graph,vis_max,graph_max]

Doing the whole task in Macro

Try to write a single Macro that is doing all the tasks in one go and directly produces the composite plot with the map and graph in the end