1 Loading Libraries

library(soilP)    # Phosphorus maps
library(raster)
library(sf)       # Loading shapefiles for background
library(ggplot2)

2 Loading stored data from previous workflow steps

data("ISRIC2011") # raster
data("soilclass") # raster attribute table
data_dir <- system.file("data", package = "soilP", mustWork = TRUE)
extdata_dir <- system.file("extdata", package = "soilP", mustWork = TRUE)

ascending order was manually assigned, maybe there could be a better order.

3 Loading Background Shapefile and Saving it to .Rdata format

GMBA_file <- file.path(extdata_dir, "GMBA mountain inventory_V1.1",
                 "GMBA mountain inventory_V1.1-World.shp")
mountain <- st_read(GMBA_file)
Reading layer `GMBA mountain inventory_V1.1-World' from data source `/Users/fvrodriguez/Library/R/3.4/library/soilP/extdata/GMBA mountain inventory_V1.1/GMBA mountain inventory_V1.1-World.shp' using driver `ESRI Shapefile'
Simple feature collection with 1003 features and 4 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -180 ymin: -55.72135 xmax: 180 ymax: 79.91116
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
save(mountain, file =  file.path(data_dir,"mountain.RData"))

4 Importing maize accession collection coordinates

accn_file <- system.file("extdata",
                         "F1PARENTS120.csv",
                         package = "soilP",
                         mustWork = TRUE)
accn_info <- read.csv(accn_file)
accn_info$Elevation_class <- classify_elevation(accn_info$Elevation)

5 Using ISRIC data

ISRIC_P <- extract_P_ISRIC(ISRIC2011, accn_info, soilclass,
                           lon = "Long", lat = "Lat")
Joining, by = "ascending"

5.1 Plotting phosphorus retention map

bg_map("Long", "Lat", data = ISRIC_P$georef, bg = mountain) +
  ggtitle(paste0("Accession selection for F1s")) +
  geom_point(aes(x = Long, y = Lat,
                 shape = Elevation_class,
                 colour = main), 
                 data = ISRIC_P$georef) +
  scale_color_manual(values = ISRIC_P$pal,
                     name = "Phosphorus\nRetention\nPotential",
                     breaks = ISRIC_P$breaks ) +
  scale_shape_manual(values = c(16, 17)) +
  theme(legend.key.size = unit(0.5, 'lines'))

6 Using Oak Ridge National Laboratory Phosphorus Model

nc_in <- file.path(extdata_dir,
              "GLOBAL_PHOSPHORUS_DIST_MAP_1223",
              "data", "pforms_den.nc")
ORNL2013 <- read_P_ORNL(nc_in)
save(ORNL2013,file = file.path(data_dir,"ORNL2013.RData"))
ORNL_P <- extract_P_ORNL(ORNL2013, ISRIC_P$georef,
                         lon = "Long", lat = "Lat" )

6.1 Plotting phosphorus availability map

bg_map("Long", "Lat", data = ORNL_P$georef, bg = mountain) +
  ggtitle(paste0("Accession selection for F1s")) +
  geom_point(aes(x = Long, y = Lat,
                 shape = Elevation_class,
                 colour = lab), 
             data = ORNL_P$georef) +
  scale_colour_gradientn(name = "Labile Inorganic\nPhosphorus",
                         colours = ORNL_P$pal(180),
                         limits = c(1, 180)) +
  scale_shape_manual(values = c(16, 17))

7 Compare ISRIC vs ORNL

boxplot(lab ~ main, las = 2, data = ORNL_P$georef,
        main = paste0("Corresponcence between Phosphorus Maps\n",
                      "ORNL 2013 Vs ISRIC 2011"),
        xlab = "Phosphorus Retention Potential Main Class",
        ylab = "Labile Inorganic Phosphorus")

pairs(ORNL_P$georef[,c("ascending", names(ORNL2013))])

LS0tCnRpdGxlOiAiRXh0cmFjdCBQIERhdGEgZnJvbSBJU1JJQyBhbmQgT2FrIFJpZGdlIE1hcHMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0aGVtZTogc3BhY2VsYWIKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQojIExvYWRpbmcgTGlicmFyaWVzCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSJoaWRlIn0KbGlicmFyeShzb2lsUCkgICAgIyBQaG9zcGhvcnVzIG1hcHMKbGlicmFyeShyYXN0ZXIpCmxpYnJhcnkoc2YpICAgICAgICMgTG9hZGluZyBzaGFwZWZpbGVzIGZvciBiYWNrZ3JvdW5kCmxpYnJhcnkoZ2dwbG90MikKYGBgCgojIExvYWRpbmcgc3RvcmVkIGRhdGEgZnJvbSBwcmV2aW91cyB3b3JrZmxvdyBzdGVwcwpgYGB7cn0KZGF0YSgiSVNSSUMyMDExIikgIyByYXN0ZXIKZGF0YSgic29pbGNsYXNzIikgIyByYXN0ZXIgYXR0cmlidXRlIHRhYmxlCmRhdGFfZGlyIDwtIHN5c3RlbS5maWxlKCJkYXRhIiwgcGFja2FnZSA9ICJzb2lsUCIsIG11c3RXb3JrID0gVFJVRSkKZXh0ZGF0YV9kaXIgPC0gc3lzdGVtLmZpbGUoImV4dGRhdGEiLCBwYWNrYWdlID0gInNvaWxQIiwgbXVzdFdvcmsgPSBUUlVFKQpgYGAKCmBhc2NlbmRpbmdgIG9yZGVyIHdhcyBtYW51YWxseSBhc3NpZ25lZCwgbWF5YmUgdGhlcmUgY291bGQgYmUgYSBiZXR0ZXIgb3JkZXIuCgojIExvYWRpbmcgQmFja2dyb3VuZCBTaGFwZWZpbGUgYW5kIFNhdmluZyBpdCB0byAuUmRhdGEgZm9ybWF0CmBgYHtyfQpHTUJBX2ZpbGUgPC0gZmlsZS5wYXRoKGV4dGRhdGFfZGlyLCAiR01CQSBtb3VudGFpbiBpbnZlbnRvcnlfVjEuMSIsCiAgICAgICAgICAgICAgICAgIkdNQkEgbW91bnRhaW4gaW52ZW50b3J5X1YxLjEtV29ybGQuc2hwIikKbW91bnRhaW4gPC0gc3RfcmVhZChHTUJBX2ZpbGUpCnNhdmUobW91bnRhaW4sIGZpbGUgPSAgZmlsZS5wYXRoKGRhdGFfZGlyLCJtb3VudGFpbi5SRGF0YSIpKQpgYGAKCiMgSW1wb3J0aW5nICBtYWl6ZSBhY2Nlc3Npb24gY29sbGVjdGlvbiBjb29yZGluYXRlcwoKYGBge3J9CmFjY25fZmlsZSA8LSBzeXN0ZW0uZmlsZSgiZXh0ZGF0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiRjFQQVJFTlRTMTIwLmNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlID0gInNvaWxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG11c3RXb3JrID0gVFJVRSkKYWNjbl9pbmZvIDwtIHJlYWQuY3N2KGFjY25fZmlsZSkKYWNjbl9pbmZvJEVsZXZhdGlvbl9jbGFzcyA8LSBjbGFzc2lmeV9lbGV2YXRpb24oYWNjbl9pbmZvJEVsZXZhdGlvbikKYGBgCiMgVXNpbmcgSVNSSUMgZGF0YQpgYGB7cn0KSVNSSUNfUCA8LSBleHRyYWN0X1BfSVNSSUMoSVNSSUMyMDExLCBhY2NuX2luZm8sIHNvaWxjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uID0gIkxvbmciLCBsYXQgPSAiTGF0IikKYGBgCgoKIyMgUGxvdHRpbmcgcGhvc3Bob3J1cyByZXRlbnRpb24gbWFwCgpgYGB7cn0KYmdfbWFwKCJMb25nIiwgIkxhdCIsIGRhdGEgPSBJU1JJQ19QJGdlb3JlZiwgYmcgPSBtb3VudGFpbikgKwogIGdndGl0bGUocGFzdGUwKCJBY2Nlc3Npb24gc2VsZWN0aW9uIGZvciBGMXMiKSkgKwogIGdlb21fcG9pbnQoYWVzKHggPSBMb25nLCB5ID0gTGF0LAogICAgICAgICAgICAgICAgIHNoYXBlID0gRWxldmF0aW9uX2NsYXNzLAogICAgICAgICAgICAgICAgIGNvbG91ciA9IG1haW4pLCAKICAgICAgICAgICAgICAgICBkYXRhID0gSVNSSUNfUCRnZW9yZWYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gSVNSSUNfUCRwYWwsCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiUGhvc3Bob3J1c1xuUmV0ZW50aW9uXG5Qb3RlbnRpYWwiLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBJU1JJQ19QJGJyZWFrcyApICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNiwgMTcpKSArCiAgdGhlbWUobGVnZW5kLmtleS5zaXplID0gdW5pdCgwLjUsICdsaW5lcycpKQoKYGBgCiMgVXNpbmcgT2FrIFJpZGdlIE5hdGlvbmFsIExhYm9yYXRvcnkgUGhvc3Bob3J1cyBNb2RlbCAKCmBgYHtyfQpuY19pbiA8LSBmaWxlLnBhdGgoZXh0ZGF0YV9kaXIsCiAgICAgICAgICAgICAgIkdMT0JBTF9QSE9TUEhPUlVTX0RJU1RfTUFQXzEyMjMiLAogICAgICAgICAgICAgICJkYXRhIiwgInBmb3Jtc19kZW4ubmMiKQoKT1JOTDIwMTMgPC0gcmVhZF9QX09STkwobmNfaW4pCgpzYXZlKE9STkwyMDEzLGZpbGUgPSBmaWxlLnBhdGgoZGF0YV9kaXIsIk9STkwyMDEzLlJEYXRhIikpCmBgYAoKYGBge3J9Ck9STkxfUCA8LSBleHRyYWN0X1BfT1JOTChPUk5MMjAxMywgSVNSSUNfUCRnZW9yZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBsb24gPSAiTG9uZyIsIGxhdCA9ICJMYXQiICkKYGBgCgojIyBQbG90dGluZyBwaG9zcGhvcnVzIGF2YWlsYWJpbGl0eSBtYXAKCmBgYHtyfQpiZ19tYXAoIkxvbmciLCAiTGF0IiwgZGF0YSA9IE9STkxfUCRnZW9yZWYsIGJnID0gbW91bnRhaW4pICsKICBnZ3RpdGxlKHBhc3RlMCgiQWNjZXNzaW9uIHNlbGVjdGlvbiBmb3IgRjFzIikpICsKICBnZW9tX3BvaW50KGFlcyh4ID0gTG9uZywgeSA9IExhdCwKICAgICAgICAgICAgICAgICBzaGFwZSA9IEVsZXZhdGlvbl9jbGFzcywKICAgICAgICAgICAgICAgICBjb2xvdXIgPSBsYWIpLCAKICAgICAgICAgICAgIGRhdGEgPSBPUk5MX1AkZ2VvcmVmKSArCiAgc2NhbGVfY29sb3VyX2dyYWRpZW50bihuYW1lID0gIkxhYmlsZSBJbm9yZ2FuaWNcblBob3NwaG9ydXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VycyA9IE9STkxfUCRwYWwoMTgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMSwgMTgwKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE2LCAxNykpCmBgYAojIENvbXBhcmUgSVNSSUMgdnMgT1JOTAoKYGBge3IgfQpib3hwbG90KGxhYiB+IG1haW4sIGxhcyA9IDIsIGRhdGEgPSBPUk5MX1AkZ2VvcmVmLAogICAgICAgIG1haW4gPSBwYXN0ZTAoIkNvcnJlc3BvbmNlbmNlIGJldHdlZW4gUGhvc3Bob3J1cyBNYXBzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIk9STkwgMjAxMyBWcyBJU1JJQyAyMDExIiksCiAgICAgICAgeGxhYiA9ICJQaG9zcGhvcnVzIFJldGVudGlvbiBQb3RlbnRpYWwgTWFpbiBDbGFzcyIsCiAgICAgICAgeWxhYiA9ICJMYWJpbGUgSW5vcmdhbmljIFBob3NwaG9ydXMiKQoKCnBhaXJzKE9STkxfUCRnZW9yZWZbLGMoImFzY2VuZGluZyIsIG5hbWVzKE9STkwyMDEzKSldKQpgYGA=