A simple example
synoptReg provides three functions to easily apply the
automatic version of the Lamb classification, also known as
Jenkinson and Collison.
The first step is to read mean sea level pressure data and then get
the 16 coordinate points to compute the classification.
get_lamb_points allows to compute theses points and
plot_lamb_scheme to visualize them.
library(synoptReg)
library(tidyverse)
data(msl)
msl$value <- msl$value/100 # Important: mslp in hPa.
points <- get_lamb_points(10,45) #centroid used for the 16-points grid computation
points
#>     x  y label
#> 1  25 50    P6
#> 2  25 45   P10
#> 3  25 40   P14
#> 4  15 55    P2
#> 5  15 50    P5
#> 6  15 45    P9
#> 7  15 40   P13
#> 8  15 35   P16
#> 9   5 55    P1
#> 10  5 50    P4
#> 11  5 45    P8
#> 12  5 40   P12
#> 13  5 35   P15
#> 14 -5 50    P3
#> 15 -5 45    P7
#> 16 -5 40   P11
plot_lamb_scheme(points) # plot lamb scheme
Once we computed these 16 points, we can use the
lamb_clas function to perform the classification. The user
can define if the undefined type (U) is desired (Jones et
al., 1996) or not (Trigo and Dacamara, 2000). thr argument
allows to select the threshold you want for total shear vorticity and
total flow, to tune the frequency of the “U” type.
clas <- lamb_clas(points, msl,U = T,thr = c(4.8,4.2)) # default c(6,6)
clas
#> $clas
#> # A tibble: 1,096 × 2
#>    time       WT   
#>    <date>     <chr>
#>  1 2000-01-01 A    
#>  2 2000-01-02 A    
#>  3 2000-01-03 A    
#>  4 2000-01-04 ANW  
#>  5 2000-01-05 A    
#>  6 2000-01-06 A    
#>  7 2000-01-07 A    
#>  8 2000-01-08 A    
#>  9 2000-01-09 C    
#> 10 2000-01-10 E    
#> # ℹ 1,086 more rows
#> 
#> $grid_clas
#> # A tibble: 5,967 × 4
#>        x     y WT    mean_WT_value
#>    <dbl> <dbl> <chr>         <dbl>
#>  1   -10    30 A             1018.
#>  2   -10    30 AE            1016.
#>  3   -10    30 AN            1018.
#>  4   -10    30 ANE           1017.
#>  5   -10    30 ANW           1019.
#>  6   -10    30 AS            1012.
#>  7   -10    30 ASE           1017.
#>  8   -10    30 ASW           1020.
#>  9   -10    30 AW            1021.
#> 10   -10    30 C             1017.
#> # ℹ 5,957 more rowsPlot the synoptic maps is quite easy using ggplot2:
library(rnaturalearth)
library(metR)
borders <- ne_countries(continent = c("europe","africa"),
                        returnclass = "sf",scale = 50)
# Plotting only cyclonic weather types, including the U type
ggplot()+
  geom_contour_fill(filter(clas$grid_clas, str_detect(WT, 'C|U')), 
              mapping = aes(x,y,z = mean_WT_value),bins = 15)+
  geom_sf(data = borders, fill = "transparent")+
  geom_contour2(filter(clas$grid_clas, str_detect(WT, 'C|U')), 
                mapping = aes(x,y,z = mean_WT_value), 
                binwidth = 4, color = "black") +
  geom_text_contour(filter(clas$grid_clas, str_detect(WT, 'C|U')), 
                    mapping = aes(x,y,z = mean_WT_value), 
                    stroke = 0.15,binwidth = 4, size = 2, check_overlap = T) +
  guides(fill = guide_colourbar(barwidth = 9, barheight = 0.5))+
  facet_wrap(~WT, ncol = 5) +
  scale_fill_gradientn(colors =  pals::coolwarm(100), name = "hPa") +
  scale_x_continuous(limits = c(min(msl$x),max(msl$x)), expand = c(0,0))+
  scale_y_continuous(limits = c(min(msl$y),max(msl$y)), expand = c(0,0))+
  theme_bw() + theme(axis.title = element_blank(),
                     axis.text = element_blank(),
                     axis.ticks = element_blank(),
                     legend.position = "bottom",
                     axis.title.x=  element_blank(),
                     axis.title.y=  element_blank(),
                     strip.background = element_blank())
References
Trigo, R.M.; DaCamara, C.C. Circulation weather types and their influence on the precipitation regime in Portugal. Int. J. Climatol. 2000, 20, 1559–1581, doi:10.1002/1097-0088(20001115)20:13<1559::AID-JOC555>3.0.CO;2-5.
Jones, P.D., Hulme, M. and Briffa, K.R., 1993: A comparison of Lamb circulation types with an objective classification scheme. Int. J. Climatol. 13, 655-663.