SRK was asked to provide a simple review of local meteorology based on regional to local tools. This less-than-a-day effort is intended to quickly understand meteorological features, considering the limitations associated with time and effort.
Code
Longitude=-110.966575Latitude =66.908855source(here::here("scripts","hydro_support.r"))#For more information#https://developers.google.com/maps/gmp-get-started\key_google<-"AIzaSyC2wTuP1tK60AxlCGpPSNetOvyZEgnO6EA"#For more information# https://www.ncdc.noaa.gov//cdo-web/tokenkey_noaa<-"PacdvUWVYvHOPwXrHRILLOJpvDnORxEB"ggmap::register_google(key = key_google)#Get elevation from google mapsElevation=GM_elev(Longitude,Latitude,key_google)site.info<-data.frame(Location="Site",Longitude=Longitude,Latitude=Latitude,Elevation=Elevation ) #Site in looped with variablessite.info_xy<-site.info %>% dplyr::rename(x="Longitude",y="Latitude",z="Elevation") %>% reshape2::melt(id.vars="Location")pandoc.table(site.info)
Location
Longitude
Latitude
Elevation
Site
-111
66.91
452.1
Code
#minimum year of information used, to be defined after seen the available infomin.ywi<-10
2 SOURCES
As a simplified review, the records review included a simple check of ECCC records and climatic gridded models ERA5-Land and Daymet.
A climatic gridded model is a computational tool used to provide spatially and temporally continuous datasets of various meteorological variables such as temperature, precipitation, humidity, and wind speed. These models interpolate or reanalyze observed data from weather stations, satellites, and other sources to generate a comprehensive representation of climatic conditions over a specified area.
These models are invaluable for research and operational applications in fields such as hydrology, climate science, and environmental management, as they help to fill gaps in observational data and allow for the analysis of long-term climatic trends and variability.
2.1 SITE Records
Information was captured at an hourly scale, and the values were presented at a daily scale.
Information in the region from Environment and Climate Change Canada was downloaded with the R-library Weathercan. As a reference local records were captured at daily scale.
Code
library(weathercan)# stations_dl()## Selecting all stationsstation.selection <-stations_search(coords =c(Latitude,Longitude), dist =500, interval ="day")## Selecting all stations##remove stations with less than 10 years of datastation.selection <- station.selection[station.selection$end - station.selection$start >=10, ]## Remove stations with last year of data before 1980station.selection <- station.selection[station.selection$end>1980,]#write.csv(station.selection, file = "SDH_regional-stations_500km-daily.csv")#-------# station.selection2 <- stations_search(coords = c(Latitude,Longitude), dist = 500, interval ="hour")# ##remove stations with less than 10 years of data# station.selection2 <- station.selection2[station.selection2$end - station.selection2$start >= 10, ]# # ## Remove stations with last year of data before 1980# station.selection2 <- station.selection2[station.selection2$end>1980,]# # write.csv(station.selection2, file = "SDH_regional-stations_500km-hrly.csv")#go ahead with dailystation.selection.dly.idx <-data.frame("Station.Name"= station.selection$station_name,"Province"= station.selection$prov,"Climate.Identifier"= station.selection$climate_id,"WebID"= station.selection$station_id,"WMO.Identifier"= station.selection$WMO_id,"TC.ID"= station.selection$TC_id,"Latitude"= station.selection$lat,"Longitude"= station.selection$lon,"Elevation"= station.selection$elev,"First.Year"= station.selection$start,"Last.Year"= station.selection$end,"Distance"= station.selection$distance,"timeframe"=rep(2, times =length(station.selection$interval)))## Download selected stations data (takes ~5min)# regional.db2 <- weather_dl(station.selection2$station_id, interval = "hour")## Artificial station.selection.idx formating to be able to use Victor's functions# station.selection.idx <- data.frame("Station.Name" = station.selection2$station_name,# "Province" = station.selection2$prov,# "Climate.Identifier" = station.selection2$climate_id,# "WebID" = station.selection2$station_id,# "WMO.Identifier" = station.selection2$WMO_id,# "TC.ID" = station.selection2$TC_id,# "Latitude" = station.selection2$lat,# "Longitude" = station.selection2$lon,# "Elevation" = station.selection2$elev,# "First.Year" = station.selection2$start,# "Last.Year" = station.selection2$end,# "Distance" = station.selection2$distance,# "timeframe" = rep(2, times = length(station.selection2$interval)))# ## Download selected stations data (takes ~5min) ## Nadine - this takes over 20-30 minutes for me. Not sure what the issue is. eccc_file<-here::here("data","rds","EC Daily Canada Data - Daily Stations.Rdata")if(file.exists(eccc_file)){ eccc_info.dt<-arrow::read_parquet(eccc_file)}else{ regional.db <-weather_dl(station_ids = station.selection$station_id, interval ="day",start =as.Date("1980-01-01"),end=as.Date("2024-07-01"))# # ## Artificial database formating to be able to use Victor's functions regional.db <-data.frame("Climate.Id"= regional.db$climate_id,"Date.Time"= regional.db$date,"Max.Temp.C"= regional.db$max_temp,"Min.Temp.C"= regional.db$min_temp,"Mean.Temp.C"= regional.db$mean_temp,"Heat.Deg.Days.C"= regional.db$heat_deg_days,"Cool.Deg.Days.C"= regional.db$cool_deg_days,"Total.Rain.mm"= regional.db$total_rain,"Total.Snow.cm"= regional.db$total_snow,"Total.Precip.mm"= regional.db$total_precip,"Snow.on.Grnd.cm"= regional.db$snow_grnd,"Dir.of.Max.Gust.10s.deg"= regional.db$dir_max_gust,"Spd.of.Max.Gust.km.h"= regional.db$spd_max_gust) eccc_info.dt<-regional.db %>% data.table::as.data.table() arrow::write_parquet(x = eccc_info.dt,sink =eccc_file)}eccc_var_lst<-eccc_info.dt %>% reshape2::melt(id.vars=c("Climate.Id","Date.Time")) %>% dplyr::filter(complete.cases(value)) %>%split(.,.$variable)lapply(eccc_var_lst,FUN=function(x){# x<-eccc_var_lst[[2]] x_var<-x$variable[1] %>%as.character() %>%make.names()%>%str_replace_all(.,"\\.","_") x_z<-reshape2::dcast(data = x,formula = Date.Time~Climate.Id,value.var ="value") %>%tk_zoo(silent=T) x_z<-x_z[,match(station.selection.dly.idx$Climate.Identifier,names(x_z))]# dwi.graph(x_z,start.year = 1900)assign(paste0("eccc_",x_var,".z"),x_z,envir = .GlobalEnv )}) %>%invisible()
2.2.1 Total Precipitation
For total precipitation, all stations with records ending after the year 2010 were selected.
It is noted that the mean annual precipitation (MAP) is correlated with latitude, followed by longitude and distance from the coast. Values seem poorly correlated with elevation.
Note: These values do not consider undercatch!
Undercatch refers to the phenomenon where precipitation gauges, particularly those used to measure snowfall, collect less precipitation than actually occurs. This under-measurement is often caused by various factors such as wind-induced turbulence around the gauge, which can prevent snowflakes from being captured efficiently. Undercatch is a significant issue in high-wind environments where the aerodynamics of the precipitation gauge can affect its ability to capture all falling snow.
Code
#Index for total precipitationeccc_prcp_idx<-station.selection.dly.idx %>%mutate(map=eccc_Total_Precip_mm.z %>%# window(start=baseline_start, end = baseline_end) %>% daily2annual.avg(FUN=sum) %>% .[,14]) %>%# dplyr::filter(Distance<200) %>% dplyr::filter(complete.cases(map)) %>% dplyr::filter(map>10) %>% dplyr::filter(Last.Year>=2010)eccc_prcp_idx %>% dplyr::select(Latitude, Longitude,Elevation,map) %>%mutate(coast=coast.dist(Latitude,Longitude)) %>%data.frame() %>%hydropairs(dec=2)
For air temperature, all stations with records ending after the year 2010 were selected.
Mean annual air temperature (Tavg) is related to latitude and longitude. Values seem not correlated with elevation and weakly correlated with distance from the coast.
Code
#Index for air temperatureeccc_tavg_idx<-station.selection.dly.idx %>%mutate(tavg=eccc_Mean_Temp_C.z %>%# window(start=baseline_start, end = baseline_end) %>% daily2annual.avg(FUN=mean) %>% .[,14]) %>%# dplyr::filter(Distance<200) %>% dplyr::filter(complete.cases(tavg)) %>% dplyr::filter(Last.Year>=2010)eccc_tavg_idx %>% dplyr::select(Latitude, Longitude,Elevation,tavg) %>%mutate(coast=coast.dist(Latitude,Longitude)) %>%data.frame() %>%hydropairs(dec=2)
#used for ggsn graphical scale, same ranges but 8% smallerxy <-ggmap::make_bbox(lon = eccc_prcp_idx$Longitude,lat = eccc_prcp_idx$Latitude,f=0.05) #used for ggsn graphical scale, same ranges but 8% smallerxy_min <-ggmap::make_bbox(lon =c(xy[1],xy[3]),lat =c(xy[2],xy[4]),f=-0.08) #ggmap capture for goggle mapsmap <-get_map(xy,scale=2,zoom=5,maptype="hybrid",source="google",messaging=FALSE)
2.3 ERA5-Land
Information was captured in the area for ERA5-Land for the complete region.
ERA5-Land is a higher spatial and temporal resolution reanalysis dataset produced by the European Centre for Medium-Range Weather Forecasts (ECMWF). It offers detailed information about various meteorological parameters such as precipitation, temperature, snow cover, and wind speed. ERA5-Land operates at a spatial resolution of approximately 9 km and provides data at hourly intervals, making it particularly useful for hydrological and environmental studies. This dataset is widely used in research and operational applications due to its comprehensive coverage and high accuracy in representing land-surface conditions.
It is particularly noted that wind speed (WS) is in the range of 4 to 5 m/s; this range may encourage a significant effect associated with undercatch.
Undercatch is the reduction of the actual efficiency of snow capture due to turbulence between the snow capture instrument and the local wind speed. This effect can be particularly relevant at wind speeds over 1 m/s.
Code
library(terra)era5_land_tavg_dly_ras<-rast(here::here("data","netcdf","era5-land_tavg_dly.nc"))era5_land_tmax_dly_ras<-rast(here::here("data","netcdf","era5-land_tmax_dly.nc"))era5_land_tmin_dly_ras<-rast(here::here("data","netcdf","era5-land_tmin_dly.nc"))era5_land_prcp_dly_ras<-rast(here::here("data","netcdf","era5-land_prcp_dly.nc"))era5_land_ws_dly_ras<-rast(here::here("data","netcdf","era5-land_ws_dly.nc"))era5_land_tavg_ma_ras<-rast(here::here("data","netcdf","era5-land_tavg_ma.nc"))era5_land_prcp_ma_ras<-rast(here::here("data","netcdf","era5-land_prcp_ma.nc"))era5_land_tavg_dly_z<-zoo(unlist(terra::extract(era5_land_tavg_dly_ras,cbind(Longitude,Latitude)))-273.15,time(era5_land_tavg_dly_ras)) %>%window(start=as.Date("1980-01-01"),end=as.Date("2023-10-31")) %>%subdaily2daily(FUN=mean)era5_land_tmax_dly_z<-zoo(unlist(terra::extract(era5_land_tmax_dly_ras,cbind(Longitude,Latitude)))-273.15,time(era5_land_tmax_dly_ras)) %>%window(start=as.Date("1980-01-01"),end=as.Date("2023-10-31")) %>%subdaily2daily(FUN=mean)era5_land_tmin_dly_z<-zoo(unlist(terra::extract(era5_land_tmin_dly_ras,cbind(Longitude,Latitude)))-273.15,time(era5_land_tmin_dly_ras)) %>%window(start=as.Date("1980-01-01"),end=as.Date("2023-10-31")) %>%subdaily2daily(FUN=mean)era5_land_prcp_dly_z<-zoo(unlist(terra::extract(era5_land_prcp_dly_ras,cbind(Longitude,Latitude))),time(era5_land_prcp_dly_ras)) %>%window(start=as.Date("1980-01-01"),end=as.Date("2023-10-31")) %>%subdaily2daily(FUN=mean)era5_land_ws_dly_z<-zoo(unlist(terra::extract(era5_land_ws_dly_ras,cbind(Longitude,Latitude))),time(era5_land_ws_dly_ras)) %>%window(start=as.Date("1980-01-01"),end=as.Date("2023-10-31")) %>%subdaily2daily(FUN=mean)era5_land_meteo_dly_z<-merge(prcp=era5_land_prcp_dly_z*1000,tavg=era5_land_tavg_dly_z,tmax=era5_land_tmax_dly_z,tmin=era5_land_tmin_dly_z,ws=era5_land_ws_dly_z) %>%fortify.zoo() %>% dplyr::mutate(rain=if_else(tavg>0,prcp,0),snow=if_else(tavg<=0,prcp,0)) %>%tk_zoo(silent=T)plot(era5_land_meteo_dly_z,main="Records at the site based on ERA5-Land")
2.4 DAYMET
Information was captured as a point and partially in the area to review the regional performance.
Daymet provides gridded meteorological data on a daily basis for North America, including variables such as daily maximum and minimum temperatures, precipitation, and shortwave radiation. Developed by the Oak Ridge National Laboratory, Daymet uses a set of spatial interpolation algorithms to estimate weather and climate patterns at a 1 km spatial resolution. Daymet is especially useful for ecological and hydrological modeling, as it offers high spatial detail over extended time periods, making it suitable for analyzing long-term climate trends and their impacts on various environmental processes.
Code
library(daymetr)daymet_info<-daymetr::download_daymet(site ="Daymet",lat = Latitude,lon = Longitude,start =1980,end=lubridate::year(now())-1,silent = T)daymet_z<-daymet_info$data %>% dplyr::mutate(dates=as.Date(paste0(year,"-01-01"))+lubridate::days(yday)-1) %>% dplyr::select(dates,prcp="prcp..mm.day.",tmax="tmax..deg.c.",tmin="tmin..deg.c.") %>% dplyr::mutate(tavg=0.5*tmax+0.5*tmin,rain=if_else(tavg>0,prcp,0),snow=if_else(tavg<=0,prcp,0)) %>%tk_zoo(silent=T)plot(daymet_z, yax.flip = T,main="Records at the site based on Daymet")
3 Precipitation Review
Site records seem more correlated with ERA5-Land than with Daymet. As no snowpack review of undercatch is implemented, it is recommended to use ERA5-Land for now; however, the information may be biased as undercatch can be a particularly important factor.
3.1 Rainfall
As a reference, the rainfall values compared with ERA5-Land show a higher Pearson Correlation of 0.45. Furthermore, the values seem slightly higher, which can be the result of undercatch corrections from ERA5-Land.
Based on the possible relevant effect associated with undercatch (due to the high wind speed), it is encouraged to use the higher range of precipitation (Daymet vs. ERA5-Land); furthermore, it is known that typically ERA5 and ERA5-Land have “some” undercatch effect already included in the total precipitation records.
Code
daily2annual.avg(daymet_z[,c("prcp","rain","snow")],FUN=sum) %>%pandoc.table(split.table=Inf,round=1,caption="Mean annual precipitation based on Daymet")
Mean annual precipitation based on Daymet
Station
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Ann
prcp
6.2
6.1
10.4
11.2
13.6
22.4
39.4
47.3
40
24.8
12.3
9.1
242.8
rain
0
0
0
0
2.4
21.3
39.4
47.2
32.5
2.1
0
0
144.9
snow
6.2
6.1
10.4
11.2
11.2
1.1
0
0.1
7.5
22.7
12.3
9.1
97.9
Code
daily2annual.avg(era5_land_meteo_dly_z[,c("prcp","rain","snow")],FUN=sum) %>%pandoc.table(split.table=Inf,round=1,caption="Mean annual precipitation based on ERA5-Land")
Mean annual precipitation based on ERA5-Land
Station
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Ann
prcp
11.1
10.3
14.2
17
25.5
38.8
48.9
56.9
46.7
36.7
18.9
14
338.9
rain
0
0
0
0
5.5
35.2
48.9
55.7
29.6
3.7
0
0
178.8
snow
11.1
10.3
14.2
17
20
3.6
0
1.1
17
32.9
18.9
14
160.1
It is noted that in the region, the mean annual precipitation measured by ECCC regional stations appears to be in the lower range compared to what is suggested by ERA5-Land. However, it is suspected that these values need to be corrected for undercatch, which would likely result in higher local values. This observation is speculative, as no review was conducted on this topic. To properly evaluate undercatch, a snowpack model needs to be implemented in the regional to local context.
Code
library(tidyterra)era5_land_prcp_ma_tbl<-fortify(era5_land_prcp_ma_ras) %>% dplyr::filter(complete.cases(prcp))#Mapggmap(map, darken =c(0.3, "white"))+#TOPOGRAHY # geom_tile(data = SRTM_tbl, aes(x = x, y = y, # fill=cut(value,seq(0,8000,500),# include.lowest=T,dig.lab=10)),# alpha=0.4)+#MERRAgeom_tile(data = era5_land_prcp_ma_tbl,aes(x=x,y=y,fill=prcp),alpha=0.6)+geom_label_repel(data=eccc_prcp_idx,aes(x=Longitude,y=Latitude,label=paste0(Station.Name,"\n",round(map,-1))),colour="darkblue",fontface="bold",alpha=0.6,box.padding =unit(0.5, "lines"),segment.color ="black",size=3 )+geom_point(data=eccc_prcp_idx,aes(x=Longitude,y=Latitude,fill=map),size=4,shape=22,alpha=0.6)+geom_point(data=site.info,aes(x=Longitude,y=Latitude),shape=5,col="red")+geom_label_repel(data=site.info,aes(x=Longitude,y=Latitude,label=Location))+# scale_fill_brewer(palette="Spectral",direction = -1)+labs(size="Elevation [masl]",x="Longitude [deg]",y="Latitude [deg]",shape="Station Name", title ="Mean Annual Precipitation",subtitle="Background from ERA5-Land |Points from ECCC",fill="mm/yr",# fill = "Topography\nfrom SRTM",# col="MAAT from\nNOAA[degC]\n(1980-2022)",caption="Note: Site is presented as a red diamond")+# theme(legend.position="bottom")+ ggsn::scalebar(x.min=xy_min[1],x.max=xy_min[3],y.min=xy_min[2],y.max=xy_min[4],dist =150,dist_unit ="km",transform = T,model ="WGS84")+scale_fill_binned(breaks=seq(200,600,50),type ="viridis")+coord_quickmap()
4 Air Temperature Review
Typically, the performance of air temperature models (climatic gridded models) tends to be particularly high. It is also noted that the local records seem highly correlated on a daily scale with Daymet and ERA5-Land; however, the records from ERA5-Land show the highest values (0.97).
Thus, the values from the climatic gridded model of ERA5-Land are recommended as preliminary values. Note that sometimes climatic gridded models tend to be slightly biased for minimum temperature; this assessment was not implemented.
daily2annual.avg(daymet_z[,c("tmax","tavg","tmin")],FUN=mean) %>%pandoc.table(split.table=Inf,round=1,caption="Mean annual air temperature based on Daymet")
Mean annual air temperature based on Daymet
Station
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Ann
tmax
-24.6
-24.2
-20.3
-11.5
-1.1
10
15.5
12.7
5
-4.4
-15.5
-21.9
-6.7
tavg
-28.3
-28.1
-24.5
-16.1
-5
5.8
10.9
8.8
2.2
-7.1
-19
-25.4
-10.5
tmin
-32
-31.9
-28.7
-20.6
-9
1.6
6.3
4.8
-0.7
-9.9
-22.5
-29
-14.3
Code
daily2annual.avg(era5_land_meteo_dly_z[,c("tmax","tavg","tmin")],FUN=mean) %>%pandoc.table(split.table=Inf,round=1,caption="Mean annual air temperature based on ERA5-Land")
Mean annual air temperature based on ERA5-Land
Station
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Ann
tmax
-27
-25.5
-19.8
-10.3
-0.9
11.3
17
13.5
5.1
-5.6
-18.6
-24.9
-7.1
tavg
-29.9
-28.9
-24.2
-14.8
-4.5
6.7
12.1
8.8
1.6
-8.3
-21.5
-27.7
-10.9
tmin
-32.6
-31.5
-27.2
-18.1
-7.3
2.7
7.5
5.1
-0.9
-10.5
-24.3
-30.5
-14
Code
era5_land_tavg_ma_tbl<-fortify(era5_land_tavg_ma_ras) %>% dplyr::filter(complete.cases(tavg)) %>%mutate(tavg=tavg-273.15)# tapp(era5_land_tavg_dly_ras,index="years",fun=mean)#Mapggmap(map, darken =c(0.3, "white"))+#TOPOGRAHY # geom_tile(data = SRTM_tbl, aes(x = x, y = y, # fill=cut(value,seq(0,8000,500),# include.lowest=T,dig.lab=10)),# alpha=0.4)+#MERRAgeom_tile(data = era5_land_tavg_ma_tbl,aes(x=x,y=y,fill=tavg),alpha=0.6)+geom_label_repel(data=eccc_tavg_idx,aes(x=Longitude,y=Latitude,label=paste0(Station.Name,"\n",round(tavg,0))),colour="darkblue",fontface="bold",alpha=0.6,box.padding =unit(0.5, "lines"),segment.color ="black",size=3 )+geom_point(data=eccc_tavg_idx,aes(x=Longitude,y=Latitude,fill=tavg),size=4,shape=22,alpha=0.6)+geom_point(data=site.info,aes(x=Longitude,y=Latitude),shape=5,col="red")+geom_label_repel(data=site.info,aes(x=Longitude,y=Latitude,label=Location))+# scale_fill_brewer(palette="Spectral",direction = -1)+labs(size="Elevation [masl]",x="Longitude [deg]",y="Latitude [deg]",shape="Station Name", title ="Mean Annual Air Temperature",subtitle="Background from ERA5-Land |Points from ECCC",fill="degC",# fill = "Topography\nfrom SRTM",# col="MAAT from\nNOAA[degC]\n(1980-2022)",caption="Note: Site is presented as a red diamond")+# theme(legend.position="bottom")+ ggsn::scalebar(x.min=xy_min[1],x.max=xy_min[3],y.min=xy_min[2],y.max=xy_min[4],dist =150,dist_unit ="km",transform = T,model ="WGS84")+scale_fill_binned(type ="viridis",breaks=seq(-20,10,2))+coord_quickmap()
5 Evaporation
5.1 Evaporation Function Corrections!
It was found that the evaporation has issue representing values beyond the artic circle, as this site is located northern than the artic circle, the equation needs to be corrected.
As a preliminary time series, it is recommended to use ERA5-Land for the site; however, this low-effort analysis suggests implementing a deeper analysis to complement with other climatic gridded models such as ERA5 and MERRA2. Additionally, this analysis did not include a comprehensive review considering the meteorological stations or bias correction. Furthermore, this review did not include snowpack review or comparison, which can help understand effects such as snow capture efficiency (undercatch).
Despite these comments, it is considered an educated guess to consider the time series for ERA5-Land at the site as a preliminary understanding of local meteorology.
6.1 Climograph
Code
source_gp<-"ERA5-Land"reanalysis_z<-era5_land_meteo_dly_z#In the case of DAYMET "unlock" these lines# source_gp<-"DAYMET"# # reanalysis_z<-daymet_zyear_start_z<-lubridate::year(start(reanalysis_z))year_end_z<-lubridate::year(last(reanalysis_z))#Mean monthlyreanalysis_mean_mon<-rbind(daily2annual.avg(reanalysis_z,FUN = sum) %>% dplyr::filter(Station%in%c("prcp","rain","snow")),daily2annual.avg(reanalysis_z,FUN = mean)%>% dplyr::filter(!Station%in%c("prcp","rain","snow")))reanalysis_mean_mon_gp<-reanalysis_mean_mon %>% reshape2::melt(data = .,id.vars="Station") %>% dplyr::filter(!variable=="Ann") %>% reshape2::dcast(data =.,formula=variable~Station)prcp_range_max<-max(reanalysis_mean_mon_gp$prcp)prcp_range_min<-min(reanalysis_mean_mon_gp$prcp,0)tavg_range_max<-max(reanalysis_mean_mon_gp$tavg)tavg_range_min<-min(reanalysis_mean_mon_gp$tavg)#ranges in Kelvintavg_range_max<-(tavg_range_max+273.15)*1.003-273.15tavg_range_min<-(tavg_range_min+273.15)*0.998-273.15slope_temp<-(prcp_range_max-prcp_range_min)/(tavg_range_max-tavg_range_min)inter_temp<-prcp_range_min-tavg_range_min*slope_tempreanalysis_mean_mon_prcp<-reanalysis_mean_mon_gp %>%rename(mon="variable") %>% reshape::melt.data.frame(measure.vars=c("rain","snow")) #Climographggplot(data=reanalysis_mean_mon_gp,aes(x=variable))+geom_bar(data=reanalysis_mean_mon_prcp,stat ="Identity", aes(x=mon,y=value,fill=variable) ,col="black") +geom_point( aes(y=slope_temp*tavg+inter_temp), size=2, color="red",alpha=0.6,shape=21,fill="red")+geom_line(aes(y=slope_temp*tavg+inter_temp,group="tavg"), size=1, color="red",alpha=0.6)+scale_y_continuous(sec.axis=sec_axis(trans=~(.-inter_temp)/slope_temp,name="Temperature [degC]"))+geom_text(aes(y=prcp*1.02,label=round(prcp,1)),alpha=0.6,nudge_y =0.6)+geom_text(aes(y=slope_temp*tavg+inter_temp,label=round(tavg,1)),alpha=0.6,nudge_y =-0.6,col="red",fontface="bold")+theme_bw()+theme(axis.line.y.right =element_line(color ="red"), axis.ticks.y.right =element_line(color ="red"),axis.text.y.right =element_text(color ="red"), axis.title.y.right =element_text(color ="red") ) +labs(x="",y="Total Precipitation [mm]", title=glue::glue("Climatogram for Longitude: {round(Longitude,2)} / Latitude: {round(Latitude,2)}"),subtitle=glue::glue("Based on {source_gp} ({year_start_z} to {year_end_z})"),fill="")+scale_fill_manual(values =c("rain"="dodgerblue3","snow"="snow2"))+theme(legend.position="bottom")
Code
pander::pandoc.table(reanalysis_mean_mon,split.table=Inf,style="simple",round=1,caption=glue::glue("Mean monthly parameters based on {source_gp}"))
Mean monthly parameters based on ERA5-Land
Station
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Ann
prcp
11.1
10.3
14.2
17
25.5
38.8
48.9
56.9
46.7
36.7
18.9
14
338.9
rain
0
0
0
0
5.5
35.2
48.9
55.7
29.6
3.7
0
0
178.8
snow
11.1
10.3
14.2
17
20
3.6
0
1.1
17
32.9
18.9
14
160.1
tavg
-29.9
-28.9
-24.2
-14.8
-4.5
6.7
12.1
8.8
1.6
-8.3
-21.5
-27.7
-10.9
tmax
-27
-25.5
-19.8
-10.3
-0.9
11.3
17
13.5
5.1
-5.6
-18.6
-24.9
-7.1
tmin
-32.6
-31.5
-27.2
-18.1
-7.3
2.7
7.5
5.1
-0.9
-10.5
-24.3
-30.5
-14
ws
5.5
5.5
5.1
4.7
4.4
4.1
4
4.1
4.3
4.4
4.9
5.2
4.7
6.2 Koppen- Geiger Climate Classification
The area is predominantly characterized by a Dfc subarctic climate. However, the local region lies on the boundary between this climate type and the ET tundra climate. Further meteorological analysis is required to accurately define the local conditions.