This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown.
# Locations of the Projects
<- read.xlsx(here::here("data","csv","Two_Rivers_Locations.xlsx"))
locs
<- locs
project_loc <- project_loc %>%
project_loc filter(Name == 'De Grooteboom TSF')
# Setting Coordinates
<- 28.5 # East
Left_P1 <- 33.5 # West
Right_P1 <- -23 # North
Top_P1 <- (Top_P1 - (Right_P1 - Left_P1-0.5)) # To make it Square (Check Southern Hemisphere)
Bottom_P1
# Downloading the basemap tiles
<- get_map(c(left = Left_P1,
base1 right = Right_P1,
top = Top_P1,
bottom = Bottom_P1),
zoom = 8,
maptype="terrain",
#scale = 1,
)
# Creating the Map
<- ggmap(base1,
map1 #extent = "normal",
extent = "device",
#extent = "panel",
)
+
map1 geom_point(data = project_loc, aes(x = Lon, y = Lat, fill = Type, shape = Type), color="white", cex=5) +
scale_fill_manual(values = c("red"), labels=c("Project Location"), name=NULL) +
scale_shape_manual(values = c(22), labels=c("Project Location"), name=NULL) +
labs(title="Two Rivers Project",
subtitle = "Locality Map",
x="Latitude (X-Coords)",
y="Longitude (Y-Coords)") +
theme_bw() +
theme(plot.title = element_text(size = 14, face="bold"),
legend.position="right",
axis.text = element_text(size = 12),
axis.title=element_text(size=12.5,face="bold")) +
annotate('rect', xmin=28.95, ymin=-24.67, xmax=30.05, ymax=-24.55, col="navy", fill="white", alpha = 0.7) +
annotate('text', x=29.5, y=-24.6, label = 'Two Rivers Project', colour = I('red'), size = 5) +
annotate('segment', x=30, xend=project_loc$Lon, y=-24.67, yend=project_loc$Lat, colour=I('navy'), arrow = arrow(length=unit(0.1,"cm")), size = 1)
###############################################################################
# Mapping the TSF and SAWS
###############################################################################
# Setting Coordinates
<- 29.5 # East
Left_P2 <- 30.8 # West
Right_P2 <- -24.5 # North
Top_P2 <- (Top_P2 - (Right_P2 - Left_P2-0.5)) # To make it Square (Check Southern Hemisphere)
Bottom_P2
# Downloading the basemap tiles
<- get_map(c(left = Left_P2,
base2 right = Right_P2,
top = Top_P2,
bottom = Bottom_P2),
zoom = 11,
maptype="terrain",
#scale = 1,
)
# Creating the Map
<- ggmap(base2,
map2 #extent = "normal",
extent = "device",
#extent = "panel",
)
<- read_csv(here::here("data","csv","Two_Rivers_SAWS_Table.csv"))
df
df
<- locs %>%
TSF filter(Type == "TSF")
<- TSF %>%
De_Grooteboom_TSF filter(Name == "De Grooteboom TSF")
<- TSF %>%
Old_TSF filter(Name == "Old TSF")
#Calculating SAWS Distance to Project TSF's
<- df %>%
df mutate(Dist_De_Grooteboom_TSF = distVincentyEllipsoid(cbind(Lon, Lat),
c(De_Grooteboom_TSF$Lon, De_Grooteboom_TSF$Lat),
a=6378137, b=6356752.3142, f=1/298.257223563)/1000,
Dist_Old_TSF = distVincentyEllipsoid(cbind(Lon, Lat), c(Old_TSF$Lon, Old_TSF$Lat),
a=6378137, b=6356752.3142, f=1/298.257223563)/1000)
# clipr::write_clip(df)
<- map2 +
MAP_Plot geom_point(data = df, mapping = aes(x = Lon,
y = Lat,
fill = MAP,
#label = Name,
),shape = 21,
size = 5) +
geom_text_repel(data = df, aes(x = Lon,
y = Lat,
label = Name,
box.padding = 0.6,
+
)) scale_fill_viridis_c(option = "G",
direction = -1,
aesthetics = "fill",
begin = 0.35,
end = 1) +
geom_point(data = TSF, aes(x = Lon, y = Lat), shape = 22, size = 4.5, fill = "red") +
geom_label_repel(data = TSF, aes(x = Lon,
y = Lat,
label = Name,
box.padding = 1)) +
theme_bw() +
labs(x="Longitude (X-Coords)",
y="Latitude (Y-Coords)",
fill = "MAP (mm/yr)") +
theme(#plot.title = element_text(size = 14, face="bold"),
#legend.position="bottom",
axis.text = element_text(size = 10.5),
axis.title=element_text(size=11,face="bold"))
MAP_Plot
ggsave(here::here("outputs","TwoRivers_MAP_Stations_V2.png"),
width = 16,
height = 10,
units = c("cm"),
plot = MAP_Plot,
dpi = 600)
library(Hydro)
<-locs$Lon[10]
Longitude<-locs$Lat[10]
Latitude
#Get elevation from google maps
=GM_elev(Longitude,Latitude,key_google = key_google)
Elevation
<-data.frame(Location="Site",
site.infoLongitude=Longitude,
Latitude=Latitude,
Elevation=Elevation)
#Site in looped with variables
<-site.info %>%
site.info_xy::rename(x="Longitude",y="Latitude",z="Elevation") %>%
dplyr::melt(id.vars="Location")
reshape2
pandoc.table(site.info)
#minimum year of information used, to be defined after seen the available info
<-10 min.ywi
NOAA records were captured and downloaded
<-here::here("data","NOAA","NOAA Info.rdata")
NOAA.file
if(file.exists(NOAA.file)){
load(NOAA.file)
else{
}
NOAA.find(longitude = Longitude,latitude = Latitude,radius_deg = 1,
#Get your own key from https://www.ncdc.noaa.gov//cdo-web/token
#Key from vmunoz@srk.co.uk
noaa.key = key_noaa)
#work just with the first 10 stations. Ranges can change based on the project
$maxdate<-if_else(selected.NOAA.GHCND$maxdate>ymd("2020-01-01"),
selected.NOAA.GHCNDas.Date(lubridate::now()),selected.NOAA.GHCND$maxdate)
$END<-if_else(ymd(selected.NOAA.GSOD$END)>ymd("20200101"),
selected.NOAA.GSOD::str_remove_all(as.Date(lubridate::now()),"-") %>% as.integer(),
stringr$END)
selected.NOAA.GSOD
NOAA.capture.GHCND()
NOAA.capture.GSOD()
NOAA.prepare()
save(file = NOAA.file,list = c("NOAA.db","NOAA.idx"))
}
%>%
NOAA.idx ::select(-WMO_ID,-ICAO) %>%
dplyrpandoc.table(style="simple",split.table=Inf,
caption="NOAA STATIONS")
ID | NAME | LATITUDE | LONGITUDE | ELEVATION | MINDATE | MAXDATE | DISTANCE |
---|---|---|---|---|---|---|---|
SF005934190 | MARTENSHOOP (POL) | -24.98 | 30.23 | 1408 | 1909-01-01 | 1997-12-31 | 12.63 |
SF005937780 | KLIPFONTEIN | -24.97 | 30.43 | 1320 | 1936-01-01 | 1997-12-31 | 32.56 |
SF005924740 | NEBO | -24.92 | 29.77 | 1570 | 1906-01-01 | 1997-12-31 | 34.32 |
SF005547860 | LYDENBURG | -25.1 | 30.47 | 1425 | 1904-01-01 | 2023-03-14 | 39.62 |
681840_99999 | LYDENBURG | -25.1 | 30.47 | 1425 | 1962-08-01 | 2023-03-14 | 39.62 |
681850_99999 | LYDENBURG | -25.1 | 30.47 | 1434 | 1998-03-01 | 2023-03-14 | 39.62 |
SF005931260 | MAANDAGSHOEK | -24.6 | 30.08 | 975 | 1924-01-01 | 1993-12-31 | 39.75 |
SF005538590 | TONTELDOOS | -25.32 | 30 | 1771 | 1904-01-01 | 1980-12-31 | 41.93 |
SF005941410 | RUSTPLAATS | -24.85 | 30.58 | 1341 | 1904-01-01 | 1997-12-31 | 49.13 |
SF005541750 | DULLSTROOM (SAR) | -25.42 | 30.1 | 2030 | 1906-01-01 | 1993-12-31 | 51.64 |
SF005536510 | LAERSDRIFT (POL) | -25.37 | 29.83 | 1450 | 1923-01-01 | 1997-12-31 | 53.9 |
SF005554550 | CEYLON (BOS) | -25.1 | 30.75 | 1030 | 1931-01-01 | 1997-12-31 | 66.74 |
SF005944440 | PILGRIMS REST (POL) | -24.92 | 30.77 | 1240 | 1907-01-01 | 1992-12-31 | 66.98 |
SF005945390 | MAC MAC BOS | -24.98 | 30.82 | 1360 | 1914-01-01 | 1992-12-31 | 71.93 |
SF005945900 | BLYDE (BOS) | -24.83 | 30.83 | 1433 | 1926-01-01 | 1997-12-31 | 74.28 |
SF005554410 | RIETVALLEI | -25.33 | 30.72 | 1030 | 1915-01-01 | 1997-12-31 | 74.43 |
682870_99999 | GRASKOP | -24.93 | 30.85 | 1436 | 1998-03-01 | 2023-03-14 | 74.97 |
SF005944570 | ELANDSFONTEIN | -24.62 | 30.77 | 1219 | 1906-01-01 | 1995-12-31 | 76.69 |
SF005174300 | MACHADODORP | -25.67 | 30.25 | 1536 | 1903-01-01 | 1997-12-31 | 80.74 |
SF005178160 | ELANDSHOEK | -25.6 | 30.48 | 1075 | 1914-01-01 | 1997-12-31 | 80.88 |
682720_99999 | OUDESTAD | -25.18 | 29.33 | 949 | 1988-11-30 | 2023-03-14 | 82.09 |
682850_99999 | BELFAST | -25.69 | 30.03 | 1879 | 2013-12-10 | 2019-07-16 | 82.25 |
SF005556730 | WITKLIP (BOS) | -25.23 | 30.88 | 1060 | 1937-01-01 | 1997-12-31 | 83.61 |
SF005948060 | WILGEBOOM (BOS) | -24.93 | 30.95 | 945 | 1935-01-01 | 1997-12-31 | 85.07 |
SF005181860 | VLAKPLAATS | -25.6 | 30.6 | 961 | 1922-01-01 | 1997-12-31 | 87.13 |
SF005177620 | WELTEVREDEN | -25.7 | 30.43 | 1844 | 1919-01-01 | 1997-12-31 | 88.93 |
681844_99999 | MAIEPSKOP(SAAFB) | -24.55 | 30.87 | 0 | 1988-01-06 | 1988-09-13 | 89.09 |
SF005946960 | SALIQUE (BOS) | -24.6 | 30.9 | 808 | 1935-01-01 | 1997-12-31 | 89.36 |
SF005165540 | ROODEPOORT | -25.73 | 29.82 | 1707 | 1905-01-01 | 1997-12-31 | 90.87 |
SF005555670 | ALKMAAR | -25.45 | 30.83 | 706 | 1905-01-01 | 1997-12-31 | 91.19 |
SF005558780 | WITWATER (BOS) | -25.13 | 31 | 1042 | 1929-01-01 | 1993-12-31 | 92.05 |
SF006363080 | THE DOWNS | -24.13 | 30.18 | 1350 | 1913-01-01 | 1975-12-31 | 92.26 |
SF006365180 | SCHELM | -24.13 | 30.3 | 840 | 1920-01-01 | 1993-12-31 | 94.01 |
SF005167080 | WONDERFONTEIN (SKL) | -25.8 | 29.9 | 1789 | 1904-01-01 | 1981-12-31 | 96.23 |
SF005951100 | BOSBOKRAND (POL) | -24.83 | 31.07 | 880 | 1905-01-01 | 1996-12-31 | 98.18 |
SF005162850 | GEMSBOKFONTEIN | -25.75 | 29.67 | 1638 | 1913-01-01 | 1974-12-31 | 98.73 |
682880_99999 | NELSPRUIT | -25.43 | 30.98 | 674 | 1973-01-01 | 2006-02-19 | 102.9 |
682890_99999 | NELSPRUIT | -25.43 | 30.98 | 883 | 1998-03-01 | 2023-03-14 | 102.9 |
682920_99999 | FLEUR DE LYS | -24.53 | 31.03 | 620 | 1974-10-08 | 2004-05-17 | 104.7 |
SF005951610 | CHAMPAGNE (NAF) | -24.68 | 31.1 | 549 | 1924-01-01 | 1997-12-31 | 104.9 |
SF006344170 | UITZICHT | -24.45 | 29.23 | 945 | 1922-01-01 | 1989-12-31 | 105.1 |
686380_99999 | MIDDELBURG | -25.68 | 29.44 | 1489 | 1957-01-01 | 2003-04-07 | 105.3 |
682770_99999 | MIDDELBURG DAM | -25.77 | 29.55 | 1527 | 1998-03-01 | 2005-10-09 | 106.3 |
SF005560880 | MAYFERN | -25.48 | 31.03 | 579 | 1930-01-01 | 1997-12-31 | 109.7 |
<-here::here("data","NOAA","NOAA Info par.rdata")
NOAA.file.par
if(file.exists(NOAA.file.par)){
load(NOAA.file.par)
else{
}
<-data.frame(var=c("PRCP","TAVG","TMAX","TMIN"),
par.reviewop=c("sum","mean","mean","mean"),
names=c("TOTAL PRECIPITATION",
"MEAN AIR TEMPERATURE",
"MAXIMUM AIR TEMPERATURE",
"MINIMUM AIR TEMPERATURE"),
stringsAsFactors = F)
apply(par.review,1,FUN=function(par){
# par<-par.review[2,]
#variable definition
<<-par[1]
par.var<<-eval(parse(text = par[2]))
par.fun<<-par[3]
par.title
#Title (two spaces before \n )
::pandoc.header(par.title,level=2)
pander
# files
<-paste0("NOAA.",par.var,".db")
db.name<-paste0("NOAA.",par.var,".idx")
idx.name<-paste0("NOAA.",par.var,".syn")
syn.name
#Prepare of DB
<-NOAA.db %>%
NOAA.par.db::filter(variable%in%par.var) %>%
dplyr::select(-NAME,-variable) %>%
dplyras.data.frame() %>%
split(x=.[c("DATE","value")],f=.$ID)
#Prepare index
<-NOAA.idx[NOAA.idx$ID%in%names(NOAA.par.db),]
NOAA.par.idx
#Sort db
<-NOAA.par.db[NOAA.par.idx$ID]
NOAA.par.db
#days with information
<-sapply(NOAA.par.db,FUN=function(x){dwi(x)%>%sum})
st.dwi
#1.selection of the stations with information more than 'n' years
<-st.dwi>=min.ywi*365.25
st.sel
#clean the DB based on dwi
<-NOAA.par.db[st.sel]
NOAA.par.db<-NOAA.par.idx[st.sel,]
NOAA.par.idx
Meteo.analysis(db = NOAA.par.db,
FUN.month =par.fun,
Min.days.annual = 300,
Max.miss.days.month = 5,output = syn.name,EC = F,
start.year = 1900) %>% invisible()
#Mean annual based on a range
%<>%mutate(ANN=eval(parse(text=syn.name))$"Daily.Comp" %>%
NOAA.par.idx window(start=as.Date("2005-01-01"),
end=as.Date("2022-12-31")) %>%
daily2annual.avg(FUN = par.fun) %>%
$Ann)
.
#2.Remove is ANN is not available
<-!is.na(NOAA.par.idx$ANN)
st.sel
#clean the DB based on dwi
<-NOAA.par.db[st.sel]
NOAA.par.db<-NOAA.par.idx[st.sel,]
NOAA.par.idx
Meteo.analysis(db = NOAA.par.db,
FUN.month =par.fun,
Min.days.annual = 300,
Max.miss.days.month = 5,output = syn.name,EC = F,
start.year = 1900) %>% invisible()
#assign the variables
assign(x = db.name,value=NOAA.par.db,envir = .GlobalEnv)
assign(x = idx.name,value=NOAA.par.idx,envir = .GlobalEnv)
#remove the auxiliar variables
rm(par.var,par.fun,par.title,
envir = .GlobalEnv)
::pandoc.p('')
pander
::pandoc.p('')
pander
})
save(file = NOAA.file.par,
list =c(glue::glue('NOAA.{par.review$var}.db'),
::glue('NOAA.{par.review$var}.syn'),
glue::glue('NOAA.{par.review$var}.idx')))
glue
}
The topographical information was captured from SRTM source, the original information is at 30 x 30 m, but the topography as upscaled up to 620 x 620 m.
TSF is presented as point.
library(terra)
library(Hydro)
library(ggmap)
# srtm_ras<-SRTM_capture(bbox = bbox2,overwrite = T,trim = T,maxcell = 1e5)
<-rast(here::here("data","dem","topo_SRTM.bil"))
srtm_ras
plot(srtm_ras)
points(x = Longitude,y=Latitude,add=TRUE )
<-dir(here::here("data","netcdf","chirps"),full.names = T)
chirps_files
<-mean(terra::tapp(rast(chirps_files),index="years",fun=sum)) %>%
chirps_prcp::fortify() %>%
tidyterra::filter(x>=29.8&x<=30.4,
dplyr<=-24.6)
y
<-ggmap::make_bbox(lon = c(chirps_prcp$x),lat=c(chirps_prcp$y))
bbox
<- get_map(location = bbox,
base5 zoom = 10,
maptype="terrain",
#scale = 1,
)
<- read_excel(here::here("data","Copy of 588618_Two_Rivers_MET_Data 02Mar2023.xlsx"),
prcp_comp sheet = "Precipitation", col_types = c("date",
"numeric", "numeric", "numeric",
"numeric", "numeric", "skip", "skip",
"skip", "skip", "skip", "skip", "skip",
"skip"))
<-data.frame(Glencore=prcp_comp$`RAIN OBS`,
map_prcp_locTwo_river=prcp_comp$`RAIN MODELLED`,
time=prcp_comp$DATES) %>%timetk::tk_zoo(silent=T) %>%
daily2annual.avg()
pandoc.table(map_prcp_loc,split.table=Inf,round=1,
caption="Comparison of records")
Station | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Ann |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Glencore | 74.8 | 62 | 50.5 | 30.2 | 10.1 | 0.3 | 0.9 | 1.3 | 12.4 | 42.1 | 106.8 | 108.9 | 500.5 |
Two_river | 128.3 | 141.3 | 127.3 | 125.9 | 67.7 | 34.8 | 12.8 | 16.5 | 4.6 | 6.4 | 26.1 | 67.8 | 759.5 |
ggmap(base5) +
geom_tile(data=chirps_prcp,aes(x=x,y=y,fill=mean),alpha=0.8)+
geom_point(data = df, mapping = aes(x = Lon,
y = Lat,
fill = MAP,
#label = Name,
shape = 21,size = 5) +
),geom_text_repel(data = df, aes(x = Lon,
y = Lat,
label = Name,
box.padding = 0.6,
+
)) # geom_point(data=NOAA.PRCP.idx,aes(x=LONGITUDE,y=LATITUDE))+
geom_point(data = TSF, aes(x = Lon, y = Lat,
fill=map_prcp_loc$Ann[2]),
shape = 22, size = 4.5) +
geom_label_repel(data = TSF, aes(x = Lon,
y = Lat,
label = Name,
box.padding = 1)) +
geom_point(aes(x=30.12228333,y=-24.81582777,
fill=map_prcp_loc$Ann[1]),size=5,shape=22)+
geom_label(aes(x=30.12228333,y=-24.81582777,label="Glencore Lion Weather"),
nudge_x = 0.02,nudge_y = 0.02)+
theme_bw() +
labs(x="Longitude (X-Coords)",y="Latitude (Y-Coords)",
fill = "MAP (mm/yr)",
title="Mean annual precipitation",
subtitle="Background: CHIRPS, Points: South African DB / point of interest")+
scale_fill_stepsn(n.breaks=6,#breaks=c(0,10,20,50,100,200,500,1000,1500),
colours = scales::brewer_pal(palette = "Spectral")(5))+
::scalebar(x.min = 29.8,x.max=30.4,y.min=-25.25,y.max=-24.6,dist = 5,
ggsndist_unit = "km",transform = T,model = "WGS84")
ggsave(filename = here::here("outputs","mean annual precipitation.png"),
width = 10,height = 10,units = "in",dpi = 200)
<-dir(here::here("data","netcdf","era5-land"),full.names = T)
era5_land_temp_files#
# era5_land_dly_avg<-terra::tapp(rast(era5_land_temp_files),index="days",fun=mean)
# era5_land_dly_max<-terra::tapp(rast(era5_land_temp_files),index="days",fun=max)
# era5_land_dly_min<-terra::tapp(rast(era5_land_temp_files),index="days",fun=min)
# #
# time(era5_land_dly_avg)<-str_remove_all(names(era5_land_dly_avg),"X") %>% ymd()
# time(era5_land_dly_max)<-str_remove_all(names(era5_land_dly_max),"X") %>% ymd()
# time(era5_land_dly_min)<-str_remove_all(names(era5_land_dly_min),"X") %>% ymd()
#
# terra::writeCDF(x = era5_land_dly_max,filename = here::here("data","netcdf","era5-land_t2m_max.nc"),
# overwrite=TRUE)
#
# terra::writeCDF(x = era5_land_dly_min,filename = here::here("data","netcdf","era5-land_t2m_min.nc"),
# overwrite=TRUE)
#
# terra::writeCDF(x = era5_land_dly_avg,filename = here::here("data","netcdf","era5-land_t2m_avg.nc"),
# overwrite=TRUE)
#Load from Kelvin to degrees
<-rast(here::here("data","netcdf","era5-land_t2m_avg.nc"))-273.15
era5_land_dly_ras_avg<-rast(here::here("data","netcdf","era5-land_t2m_max.nc"))-273.15
era5_land_dly_ras_max<-rast(here::here("data","netcdf","era5-land_t2m_min.nc"))-273.15
era5_land_dly_ras_min
<-c(mean(tapp(era5_land_dly_ras_max,index="years",fun=mean,na.rm=T)),
era5_land_mon_ras_t2mmean(tapp(era5_land_dly_ras_avg,index="years",fun=mean,na.rm=T)),
mean(tapp(era5_land_dly_ras_min,index="years",fun=mean,na.rm=T)))
<-c(terra::resample(srtm_ras,era5_land_mon_ras_t2m),
era5_land_mon_ras_t2m
era5_land_mon_ras_t2m)
names(era5_land_mon_ras_t2m)<-c("z","max","avg","min")
<-era5_land_mon_ras_t2m %>%
era5_land_t2m::fortify()
tidyterra
plot(era5_land_mon_ras_t2m)
<- read_excel(here::here("data","Copy of 588618_Two_Rivers_MET_Data 02Mar2023.xlsx"),
t2m_comp sheet = "Temperature", col_types = c("date",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "text", "text",
"text", "text", "text", "text", "text"))[,1:10]
<-zoo(t2m_comp[,5:10],as.Date(t2m_comp$DATES)) %>%
t2m_comp_z1# window(end=as.Date("2021-12-31")) %>%
subdaily2daily(FUN=mean)
plot(t2m_comp_z1,main="Daily temperature comparison - all records")
<-zoo(t2m_comp[,5:10],as.Date(t2m_comp$DATES)) %>%
t2m_comp_zwindow(end=as.Date("2021-12-31")) %>%
subdaily2daily(FUN=mean)
plot(t2m_comp_z,main="Daily temperature comparison - up to 2021-12-31")
# plot(zoo(t2m_comp[,5:10],as.Date(t2m_comp$DATES)))
<-daily2annual.avg(t2m_comp_z,FUN=mean)%>%
t2m_comp_annseparate(col = Station,sep = " ",into = c("par","location"))
pandoc.table(t2m_comp_ann,split.table=Inf,round=1,
caption="Comparison of monthly records. OBS is Glencore / MERRA2 is Two Rivers")
par | location | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Ann |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tmean | OBS | 25.7 | 25.4 | 24.7 | 21.7 | 18.8 | 15.8 | 15.8 | 18.7 | 21.8 | 23.3 | 24.6 | 25.2 | 21.8 |
Tmax | OBS | 32.4 | 32.3 | 31.4 | 28.5 | 26.8 | 24.2 | 23.9 | 26.8 | 29.8 | 30.2 | 31.3 | 31.5 | 29.1 |
Tmin | OBS | 20 | 19.9 | 18.2 | 14.7 | 10.4 | 7.2 | 7.2 | 10.3 | 14 | 16.4 | 18.2 | 19.7 | 14.7 |
Tmean | MERRA2 | 22 | 22.3 | 21.1 | 19.3 | 17.4 | 14.4 | 12.7 | 13.2 | 16.3 | 19 | 20.1 | 21.5 | 18.3 |
Tmax | MERRA2 | 29.2 | 29.8 | 28.2 | 26.9 | 25.7 | 23.3 | 21.8 | 22.7 | 25.7 | 28.4 | 28.7 | 29.3 | 26.6 |
Tmin | MERRA2 | 15.6 | 15.7 | 15.1 | 13 | 10.9 | 7.6 | 5.9 | 6 | 8.7 | 11.3 | 12.7 | 14.7 | 11.4 |
$Elev<-mapply(GM_elev,TSF$Lon,TSF$Lat,key_google = key_google)
TSF
<-tibble(Lon=30.12228333,Lat=-24.81582777,
Glencore_tblName="Glencore Lion Weather") %>%
mutate(Elev=GM_elev(Lon,Lat,key_google = key_google))
<-cbind(Glencore_tbl,t2m_comp_ann %>%
Glencore_tbl::filter(location=="OBS") %>%
dplyr::select(par,Ann) %>%
dplyr::dcast(formula = .~par,value.var = "Ann")) %>%
reshape2::select(-.)
dplyr
<-cbind(TSF,t2m_comp_ann %>%
TSF_tbl::filter(location=="MERRA2") %>%
dplyr::select(par,Ann) %>%
dplyr::dcast(formula = .~par,value.var = "Ann")) %>%
reshape2::select(-.)
dplyr
<-rbind(Glencore_tbl,
sel_locnames(Glencore_tbl)]) %>%
TSF_tbl[::melt(id.vars=c("Lon","Lat","Name","Elev")) %>%
reshape2mutate(variable=str_remove_all(variable,"T"),
variable=if_else(variable=="mean","avg",variable))
<-rbind(
noaa_loc%>%
NOAA.TAVG.idx mutate(par="avg"),
%>%
NOAA.TMIN.idx mutate(par="min"),
%>%
NOAA.TMAX.idx mutate(par="max"))
<-rbind(
review_loc%>%
sel_loc mutate(source="reviewed\nstations"),
%>%
noaa_loc ::select(Lon=LONGITUDE,Lat=LATITUDE,Name=NAME,Elev=ELEVATION,
dplyrvariable=par,value=ANN) %>%
mutate(source="noaa")) %>%
mutate(Name=toupper(Name))
pandoc.table(review_loc,split.table=Inf)
Lon | Lat | Name | Elev | variable | value | source |
---|---|---|---|---|---|---|
30.12 | -24.82 | GLENCORE LION WEATHER | 810.1 | max | 29.1 | reviewed stations |
30.14 | -24.93 | DE GROOTEBOOM TSF | 1000 | max | 26.63 | reviewed stations |
30.11 | -24.96 | OLD TSF | 981 | max | 26.63 | reviewed stations |
30.12 | -24.82 | GLENCORE LION WEATHER | 810.1 | avg | 21.8 | reviewed stations |
30.14 | -24.93 | DE GROOTEBOOM TSF | 1000 | avg | 18.26 | reviewed stations |
30.11 | -24.96 | OLD TSF | 981 | avg | 18.26 | reviewed stations |
30.12 | -24.82 | GLENCORE LION WEATHER | 810.1 | min | 14.68 | reviewed stations |
30.14 | -24.93 | DE GROOTEBOOM TSF | 1000 | min | 11.44 | reviewed stations |
30.11 | -24.96 | OLD TSF | 981 | min | 11.44 | reviewed stations |
30.47 | -25.1 | LYDENBURG | 1434 | avg | 16.74 | noaa |
30.85 | -24.93 | GRASKOP | 1436 | avg | 15.77 | noaa |
29.33 | -25.18 | OUDESTAD | 949 | avg | 20.47 | noaa |
30.98 | -25.43 | NELSPRUIT | 883 | avg | 18.98 | noaa |
30.47 | -25.1 | LYDENBURG | 1434 | min | 10.49 | noaa |
30.85 | -24.93 | GRASKOP | 1436 | min | 11.07 | noaa |
29.33 | -25.18 | OUDESTAD | 949 | min | 12.64 | noaa |
30.98 | -25.43 | NELSPRUIT | 883 | min | 13.84 | noaa |
30.47 | -25.1 | LYDENBURG | 1434 | max | 25.37 | noaa |
30.85 | -24.93 | GRASKOP | 1436 | max | 23.24 | noaa |
29.33 | -25.18 | OUDESTAD | 949 | max | 30.62 | noaa |
30.98 | -25.43 | NELSPRUIT | 883 | max | 26.37 | noaa |
<-ggmap::make_bbox(lon = c(era5_land_t2m$x),lat=c(era5_land_t2m$y),f = 0)
bbox2
<- get_map(location = bbox2,
base6 zoom = 8,
maptype="terrain",
#scale = 1,
)
# sel_loc %>% dplyr::select(Lon,Lat,Name,Elev) %>%
# unique() %>% write.excel()
<-here::here("outputs","air temperature raster_ML.nc")
ml_file
if(file.exists(ml_file)){
<-rast(here::here("outputs",
era5_land_inter_ras"air temperature raster_ML.nc"))
names(era5_land_inter_ras)<-c("z","avg","max","min")
else{
}
library(MACHISPLIN)
#Topographical information
<-rast(here::here("data","dem","topo_SRTM.bil"))
srtm_ras
#ground parameters estimated
<-terra::terrain(srtm_ras,
topo_terrain_crop.rasv = c( "TRI","TPI","roughness","slope","aspect"),
unit = "degrees")
#information implemented as raster (instead of terra!)
<-stack(raster(srtm_ras),
raster_stackbrick(topo_terrain_crop.ras)) %>%
::crop(x=.,y=raster(era5_land_mon_ras_t2m))
raster
<-era5_land_mon_ras_t2m %>%
map_utm.df::fortify() %>%
tidyterra::select(x,y,max,avg,min) %>%
dplyrdata.frame()
#Machine learning model
<-machisplin.mltps(int.values=map_utm.df, tps = T,
interp.rastcovar.ras=raster_stack,
smooth.outputs.only=TRUE, n.cores=16)
#rename the layers as were defined on the original dataset
names(interp.rast)<-c("max","avg","min")
<-c(rast(interp.rast$avg$final),
era5_land_inter_rasrast(interp.rast$max$final),
rast(interp.rast$min$final))
<-c(terra::resample(srtm_ras,era5_land_inter_ras),
era5_land_inter_ras
era5_land_inter_ras)
names(era5_land_inter_ras)[1]<-"z"
::writeCDF(x = era5_land_inter_ras,
terrafilename = here::here("outputs",
"air temperature raster_ML.nc"))
# NOAA.TAVG.syn$Daily.Comp %>% dwi.graph(start.year = 1900)
# tidyterra::fortify(era5_land_inter_ras) %>%
# dplyr::filter(complete.cases(.)) %>%
# reshape2::melt(id.var=c("x","y","topo_SRTM")) %>%
# ggplot(data=.,aes(x=topo_SRTM,y=value,col=variable))+
# # geom_point(alpha=0.1,shape=22)+
# geom_smooth(method="lm",aes(col=variable))+
# geom_point(data=noaa_loc,aes(x=ELEVATION,y=ANN,col=par))+
# geom_point(data=sel_loc,aes(x=Elev,y=value,col=variable),size=5,
# shape=22,
# fill="black")
}
plot(era5_land_inter_ras)
%>%
era5_land_t2m ::filter(complete.cases(.)) %>%
dplyr::melt(id.var=c("x","y","z")) %>%
reshape2ggplot(data=,aes(x=z,y=value,col=variable))+
geom_point(alpha=0.5,shape=22,col="black")+
geom_smooth(data=review_loc %>% dplyr::filter(source=="noaa"),
aes(x=Elev,y=value,col=variable),
method="lm",se=F,col="red")+
geom_smooth(method="lm",col="black",se=F)+
# geom_point(data=review_loc,aes(x=ELEVATION,y=ANN,col=par))+
geom_point(data=review_loc,aes(x=Elev,y=value,
col=source),size=5)+
geom_label_repel(data=review_loc,aes(x=Elev,y=value,
label=Name %>% str_wrap(12)),alpha=0.8,
col="black",
size=2.5)+
facet_wrap(~variable,scale="free_y")+
stat_poly_eq(aes(label = paste("ERA5:",..eq.label.., ..rr.label.., sep = "~~~")),
formula = y ~ poly(x, 1, raw = TRUE),
label.x.npc = 0.1,label.y.npc = 0.1,col="black")+
stat_poly_eq(data=review_loc %>% dplyr::filter(source=="noaa"),aes(x=Elev,y=value,
label = paste("NOAA:",
sep = "~~~")),
..eq.label.., ..rr.label.., formula = y ~ poly(x, 1, raw = TRUE),
label.x.npc = 0.1,label.y.npc = 0.05,col="red"
+
)theme_light()+
theme(legend.position = "bottom")+
scale_x_continuous(breaks=seq(0,5000,200))+
labs(x="Elevation [masl]",y="Mean Annual Air Temperature [degC]",col="air temperature:",
shape="source:",
caption="Note: NOAA records from 2005 to 2022\nreviewed station records from 2012 to 2021\nERA5-Land records from 2000 to 2022",
title="Mean annual air temperature gradients",
subtitle="black : ERA5-Land \nred : NOAA DB\nblue : points of interest")+
scale_color_manual(values=c("red","blue"))
ggsave(filename = here::here("outputs","mean annual precipitation.png"),
width = 10,height = 10,units = "in",dpi = 200)
<-raster(era5_land_inter_ras$avg) %>%
era5_land_inter_tavgrasterToPoints() %>%
data.frame()
<-tidyterra::fortify(era5_land_inter_ras) %>%
era5_land_t2m_gp_HD::filter(complete.cases(.)) %>%
dplyr# dplyr::rename(z="topo_SRTM") %>%
::melt(id.vars=c("x","y","z"))
reshape2
<-era5_land_t2m %>%
era5_land_t2m_gp::melt(id.vars=c("x","y","z"))
reshape2
ggmap(base6) +
# geom_tile(data=era5_land_t2m_gp_HD,aes(x=x,y=y,fill=value),alpha=0.8)+
geom_tile(data=era5_land_t2m_gp,aes(x=x,y=y,fill=value),alpha=0.8)+
geom_point(data = review_loc,
mapping = aes(x = Lon,y = Lat,fill = value,
shape=source),size = 5,
alpha=0.8) +
geom_text_repel(data = review_loc,
mapping=aes(x = Lon,y = Lat,label = Name)) +
theme_bw() +
labs(x="Longitude (X-Coords)",y="Latitude (Y-Coords)",
fill = "mean annual\nair temperature (degC)",
caption="Note: NOAA records from 2005 to 2022\nreviewed station records from 2012 to 2021\nERA5-Land records from 2000 to 2022",
title="Mean annual temperature",
subtitle="Background: Era5-Land / Point: NOAA and point of interest"
+
)scale_fill_stepsn(n.breaks=8,#breaks=c(0,10,20,50,100,200,500,1000,1500),
colours = scales::brewer_pal(palette = "Spectral")(5))+
coord_quickmap()+
scale_y_continuous(limits=c(-25.8,-24.5))+
facet_grid(variable~.)+
theme(legend.position="bottom")+
::scalebar(x.min = 29,x.max=31,y.min=-25.65,y.max=-24.8,dist = 25,
ggsndist_unit = "km",transform = T,model = "WGS84",height = 0.05)+
scale_shape_manual(values=c(21,22))
ggsave(filename = here::here("outputs","mean annual air temperature - geographical distribution.png"),
width = 8,height = 12,units = "in",dpi = 200)
ggmap(base5) +
geom_tile(data=era5_land_t2m_gp_HD %>%
::filter(x>=29.8,x<=30.4,
dplyr>=-25.2,y<=-24.6,
y=="avg"),
variableaes(x=x,y=y,fill=value),alpha=0.8)+
# geom_tile(data=era5_land_t2m_gp,aes(x=x,y=y,fill=value),alpha=0.8)+
geom_point(data = review_loc %>% dplyr::filter(variable=="avg"),
mapping = aes(x = Lon,y = Lat,fill = value,
shape=source),shape = 21,size = 5,
alpha=0.8) +
geom_text(data = review_loc,
mapping=aes(x = Lon,y = Lat,label = Name),
nudge_x = 0.02,nudge_y = 0.02) +
theme_bw() +
labs(x="Longitude (X-Coords)",y="Latitude (Y-Coords)",
fill = "mean annual\nair temperature (degC)",
caption="Note: NOAA records from 2005 to 2022\nreviewed station records from 2012 to 2021\nERA5-Land records from 2000 to 2022",
title="Mean annual air temperature based on ERA5-Land",
subtitle="values downscaled with machine learning model")+
scale_fill_stepsn(n.breaks=10,#breaks=c(0,10,20,50,100,200,500,1000,1500),
colours = scales::brewer_pal(palette = "Spectral")(5))+
coord_quickmap()+
scale_y_continuous(limits=c(-25.2,-24.6))+
scale_x_continuous(limits=c(29.8,30.4))+
theme(legend.position="bottom")+
::scalebar(x.min = 29.8,x.max=30.4,y.min=-25.15,y.max=-24.6,dist = 5,
ggsndist_unit = "km",transform = T,model = "WGS84")
ggsave(filename = here::here("outputs","mean annual air temperature - geographical distribution_HD_AVG.png"),
width = 12,height = 12,units = "in",dpi = 200)
# Daily Rainfall Dataset Import
<- read.xlsx(here::here("data","csv","MARTENSHOOP (POL)_Merged_RAW.xlsx"))
pr
$Datetime <- convertToDate(pr$Datetime)
pr
<- pr %>%
pr filter(Datetime >= "1906-01-01")
$Month <- month(pr$Datetime)
pr$Year <- year(pr$Datetime)
pr<- pr %>%
pr relocate(Datetime, Month, Year);
# Monthly Precipitation
<- pr %>%
prM group_by(Month, Year) %>%
summarize(MARTENSHOOP = sum(MARTENSHOOP),
CHIRPS = sum(CHIRPS),
ERA5 = sum(ERA5),
TRMM = sum(TRMM),
GPM = sum(GPM),
MERRA2 = sum(MERRA2),
CDR = sum(CDR),
)
$Period <- make_date(year = prM$Year, month = prM$Month, day = 15)
prM$Period <-as.Date(prM$Period, format(prM$Period,'%Y-%m'))
prM<- prM %>% relocate(Period)
prM
# Monthly Count of Data
<- pr
prcountM $Period <- make_date(year = prcountM$Year, month = prcountM$Month, day = 15)
prcountM$Period <-as.Date(prcountM$Period, format(prcountM$Period,'%Y-%m'))
prcountM<- prcountM %>%
prcountM group_by(Period, Month, Year) %>%
summarise(MARTENSHOOP = sum(!is.na(MARTENSHOOP)),
CHIRPS = sum(!is.na(CHIRPS)),
ERA5 = sum(!is.na(ERA5)),
TRMM = sum(!is.na(TRMM)),
GPM = sum(!is.na(GPM)),
MERRA2 = sum(!is.na(MERRA2)),
CDR = sum(!is.na(CDR )),
)
prcountM
$DaysInMonth <- days_in_month(prcountM$Period)
prcountM
$MARTENSHOOP_Pct <- round((prcountM$MARTENSHOOP / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$CHIRPS_Pct <- round((prcountM$CHIRPS / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$ERA5_Pct <- round((prcountM$ERA5 / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$TRMM_Pct <- round((prcountM$TRMM / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$GPM_Pct <- round((prcountM$GPM / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$MERRA2_Pct <- round((prcountM$MERRA2 / prcountM$DaysInMonth) * 100, digits = 2)
prcountM$CDR_Pct <- round((prcountM$CDR / prcountM$DaysInMonth) * 100, digits = 2)
prcountM
#prcountM <- subset(prcountM, select = -c(MARTENSHOOP, CHIRPS, ERA5, TRMM, GPM, MERRA2, CDR))
#colnames(prcountM) <- c("Period", "Month", "Year", "DaysInMonth", "MARTENSHOOP", "CHIRPS", "ERA5", "TRMM", "GPM", "MERRA2", "CDR")
prcountM
# Annual Count of Data
<- prcountM
prcountY
<- prcountY %>%
prcountY group_by(Year) %>%
summarise(MARTENSHOOP = sum(MARTENSHOOP),
CHIRPS = sum(CHIRPS),
ERA5 = sum(ERA5),
TRMM = sum(TRMM),
GPM = sum(GPM),
MERRA2 = sum(MERRA2),
CDR = sum(CDR),
DaysInYear = sum(DaysInMonth)
)
$MARTENSHOOP_Pct <- round((prcountY$MARTENSHOOP / prcountY$DaysInYear) * 100, digits = 2)
prcountY$CHIRPS_Pct <- round((prcountY$CHIRPS / prcountY$DaysInYear) * 100, digits = 2)
prcountY$ERA5_Pct <- round((prcountY$ERA5 / prcountY$DaysInYear) * 100, digits = 2)
prcountY$TRMM_Pct <- round((prcountY$TRMM / prcountY$DaysInYear) * 100, digits = 2)
prcountY$GPM_Pct <- round((prcountY$GPM / prcountY$DaysInYear) * 100, digits = 2)
prcountY$MERRA2_Pct <- round((prcountY$MERRA2 / prcountY$DaysInYear) * 100, digits = 2)
prcountY$CDR_Pct <- round((prcountY$CDR / prcountY$DaysInYear) * 100, digits = 2)
prcountY
<- subset(prcountY, select = -c(MARTENSHOOP, CHIRPS, ERA5, TRMM, GPM, MERRA2, CDR))
prcountY colnames(prcountY) <- c("Year", "DaysInYear", "MARTENSHOOP", "CHIRPS", "ERA5", "TRMM", "GPM", "MERRA2", "CDR")
prcountY
# Annual Long Data for Vis
<- prcountY
prcountY_L <- pivot_longer(prcountY_L,
prcountY_L cols = 3:9,
names_to = "Station",
values_to = "PCT")
<- prcountY_L %>% arrange(Station, Year, .by_group6 = TRUE)
prcountY_L
prcountY_L
# .height=3.93701, fig.width=6.29921
# Annual Data Coverage Graph
<- ggplot(data = prcountY_L, aes(x = Year, y = Station, fill = PCT)) +
p1 geom_tile(color = "black",
size = 0.005,
alpha = 0.9) +
#scale_fill_gradient(low = "white", high = "blue") +
scale_fill_distiller(type = "seq",
#palette = "Greys",
palette = "YlGnBu",
direction = 1,
na.value = "Gray") +
theme_bw() +
theme(plot.title = element_text(size = 13),
axis.text = element_text(size = 10),
axis.title = element_text(size = 11))+
labs(#title = "Meteorological Dataset Annual Data Coverage (%)",
#title = "OMAS OKSUT Project",
#subtitle = "Local Meteorological Stations' Annual Data Coverage (%)",
fill = "Percentage (%)",
y = NULL) +
guides(fill = guide_colourbar(barwidth = 0.75,
barheight = 7))+
coord_fixed(ratio = 10,
xlim = c(1900,2023),
ylim = NULL,
expand = FALSE,
clip = "on") +
scale_y_discrete(limits = c("CDR",
"MERRA2",
"GPM",
"TRMM",
"ERA5",
"CHIRPS",
"MARTENSHOOP"))
p1
#pr2 <- read_excel("MARTENSHOOP (POL)_Merged_RAW.xlsx")
#pr2 <- pr2 %>%
# filter(Datetime >= "1906-01-01")
<- pr
pr2 #pr2 <- select(pr2, c("Month","Year","MARTENSHOOP", "CHIRPS", "ERA5", "TRMM", "GPM","MERRA2", "CDR"))
<- dplyr::select(pr2, c("Month","Year","MARTENSHOOP", "CHIRPS", "ERA5","MERRA2", "CDR"))
pr2 <- pr2 %>%
pr2 drop_na()
<- pr2 %>%
pr2 group_by(Month, Year) %>%
summarise(MARTENSHOOP = sum(MARTENSHOOP),
CHIRPS = sum(CHIRPS),
ERA5 = sum(ERA5),
MERRA2 = sum(MERRA2),
CDR = sum(CDR),
%>%
) arrange(Year)
<- subset(pr2, select = -c(Month, Year)) # Delete Month and Year Cols.
pr2
pr2
<- GGally::ggpairs(pr2,
p2 #title = "Develi OMGI - Gridded Models Precipitation Correlation",
#columns = 1:4,
progress = FALSE, # To suppress ggpairs progress notes.
proportions = "auto",
upper = list(continuous = GGally::wrap("cor", size = 3, color = "red",
display_grid = FALSE)),
#diag = list(continuous = "densityDiag"),
lower = list(continuous = GGally::wrap("smooth", alpha = 0.4,
size = 1, color = "blue"))
+
) theme_bw(base_size = 8.75) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +
theme(strip.text.y.right = element_text(angle = 0, vjust = 0.5, hjust=0))
p2
ggsave(here::here("outputs","MARTENSHOOP_Pr_ScatterPlot_Matrix.png"),
width = 16,
height = 11,
units = c("cm"),
plot = p2,
dpi = 600)
<- read_excel(here::here("data","csv","TwoRivers_CHIRPS_Raster_Elv_Precipitation.xlsx"),
saws sheet = "saws" )
<- read_excel(here::here("data","csv","TwoRivers_CHIRPS_Raster_Elv_Precipitation.xlsx"),
CHIRPS2000 sheet = "df_CHIRPS2000_DEM")
<- read_excel(here::here("data","csv","TwoRivers_CHIRPS_Raster_Elv_Precipitation.xlsx"),
CHIRPS sheet = "df_CHIRPS_DEM")
<- read_excel(here::here("data","csv","TwoRivers_CHIRPS_Raster_Elv_Precipitation.xlsx"),
df_CHIRPS sheet = "df_CHIRPS")
<- df_CHIRPS %>%
df_CHIRPS_1 ::filter(Type != "CHIRPS" & Type != "SAWS SRTM (1981-2000)")
dplyr
<- df_CHIRPS %>%
df_CHIRPS_SRTM ::filter(Type != "CHIRPS" & Type != "SAWS (1981-2000)")
dplyr
saws; CHIRPS2000; CHIRPS; df_CHIRPS; df_CHIRPS_1; df_CHIRPS_SRTM
<- ggplot(data = df_CHIRPS_1, mapping = aes(y = MAP, x = Elevation, color = Type)) +
p3 geom_point(#shape = 1,
size = 2,
#color = "black",
#fill = Type,
alpha = 1) +
#(method = lm, fullrange = TRUE) +
scale_colour_brewer(palette = "Set1") +
stat_poly_line() +
stat_poly_eq(mapping = use_label(c("eq", "R2"))) +
geom_segment(aes(x = 1000, xend = 1000, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
geom_segment(aes(x = 970, xend = 970, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
theme_bw() +
theme(legend.position = "bottom") +
labs(x = "Elevation (mamsl)",
y = "MAP (mm)",
color = "Dataset") +
geom_text(aes(label="De Grooteboom TSF",
x=1020,
y = 750,
angle = 90),size=4,color = "black") +
geom_text(aes(label="Old TSF",
x=940,
y = 750,
angle = 90),size=4,color = "black") +
geom_text_repel(data = df_CHIRPS_1,
aes(x = Elevation,
y = MAP,
label = NAME,
size = 3)
),
<- ggplot(data = df_CHIRPS_SRTM, mapping = aes(y = MAP, x = Elevation, color = Type)) +
p4 geom_point(#shape = 1,
size = 2,
#color = "black",
#fill = Type,
alpha = 1) +
#(method = lm, fullrange = TRUE) +
scale_colour_brewer(palette = "Set1") +
stat_poly_line() +
stat_poly_eq(mapping = use_label(c("eq", "R2"))) +
geom_segment(aes(x = 1000, xend = 1000, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
geom_segment(aes(x = 970, xend = 970, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
theme_bw() +
theme(legend.position = "bottom") +
labs(x = "Elevation (mamsl)",
y = "MAP (mm)",
color = "Dataset") +
geom_text(aes(label="De Grooteboom TSF",
x=1020,
y = 750,
angle = 90),size=4,color = "black") +
geom_text(aes(label="Old TSF",
x=940,
y = 750,
angle = 90),size=4,color = "black") +
geom_text_repel(data = df_CHIRPS_SRTM,
aes(x = Elevation,
y = MAP,
label = NAME,
size = 3)
),
p3; p4
<- read_excel(here::here("data","csv","TwoRivers_GPM_Raster_Elv_Precipitation.xlsx"),
GPM sheet = "df_GPM_DEM")
<- read_excel(here::here("data","csv","TwoRivers_GPM_Raster_Elv_Precipitation.xlsx"),
df_GPM sheet = "df_GPM")
<- df_GPM %>%
df_GPM_1 ::filter(Type != "SAWS SRTM (1981-2000)")
dplyr
<- df_GPM %>%
df_GPM_SRTM ::filter(Type != "SAWS (1981-2000)")
dplyr
saws; GPM; df_GPM; df_GPM_1; df_GPM_SRTM
<- ggplot(data = df_GPM_1, mapping = aes(y = MAP, x = Elevation, color = Type)) +
p5 geom_point(#shape = 1,
size = 2,
#color = "black",
#fill = Type,
alpha = 1) +
#(method = lm, fullrange = TRUE) +
scale_colour_brewer(palette = "Set1") +
stat_poly_line() +
stat_poly_eq(mapping = use_label(c("eq", "R2"))) +
geom_segment(aes(x = 1000, xend = 1000, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
geom_segment(aes(x = 970, xend = 970, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
theme_bw() +
theme(legend.position = "bottom") +
labs(x = "Elevation (mamsl)",
y = "MAP (mm)",
color = "Dataset") +
geom_text(aes(label="De Grooteboom TSF",
x=1020,
y = 650,
angle = 90),size=4,color = "black") +
geom_text(aes(label="Old TSF",
x=940,
y = 650,
angle = 90),size=4,color = "black") +
geom_text_repel(data = df_GPM_1,
aes(x = Elevation,
y = MAP,
label = NAME,
size = 3)
),
<- ggplot(data = df_GPM_SRTM, mapping = aes(y = MAP, x = Elevation, color = Type)) +
p6 geom_point(#shape = 1,
size = 2,
#color = "black",
#fill = Type,
alpha = 1) +
#(method = lm, fullrange = TRUE) +
scale_colour_brewer(palette = "Set1") +
stat_poly_line() +
stat_poly_eq(mapping = use_label(c("eq", "R2"))) +
geom_segment(aes(x = 1000, xend = 1000, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
geom_segment(aes(x = 970, xend = 970, y = -Inf, yend = +Inf), linetype = 2, color = "black") +
theme_bw() +
theme(legend.position = "bottom") +
labs(x = "Elevation (mamsl)",
y = "MAP (mm)",
color = "Dataset") +
geom_text(aes(label="De Grooteboom TSF",
x=1020,
y = 650,
angle = 90),size=4,color = "black") +
geom_text(aes(label="Old TSF",
x=940,
y = 650,
angle = 90),size=4,color = "black") +
geom_text_repel(data = df_GPM_SRTM,
aes(x = Elevation,
y = MAP,
label = NAME,
size = 3)
),
p5; p6
<- p3 / p5
p7 p7
ggsave(here::here("outputs","MAP-Elevation_Relationship_V2.png"),
width = 16,
height = 19,
units = c("cm"),
plot = p7,
dpi = 600)
<-here::here("data","rds",paste0("Backup Meteorological review_",as.Date(now()),".rdata"))
file.image
save.image(file = file.image)