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 list
data("soilclass") # raster attribute table
data_dir <- system.file("data", package = "soilP", mustWork = TRUE)
extdata_dir <- system.file("extdata", package = "soilP", mustWork = TRUE)

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$main, 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'))
package ‘maps’ was built under R version 3.4.4

6 Using Oak Ridge National Laboratory Phosphorus Model

nc_in <- file.path(extdata_dir,
              "GLOBAL_PHOSPHORUS_DIST_MAP_1223",
              "data", "pforms_den.nc")
ORNL2013 <- brickP(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))])

LS0tCnRpdGxlOiAiRXh0cmFjdCBQIERhdGEgZnJvbSBJU1JJQyBhbmQgT2FrIFJpZGdlIE1hcHMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0aGVtZTogc3BhY2VsYWIKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQojIExvYWRpbmcgTGlicmFyaWVzCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSJoaWRlIn0KbGlicmFyeShzb2lsUCkgICAgIyBQaG9zcGhvcnVzIG1hcHMKbGlicmFyeShyYXN0ZXIpCmxpYnJhcnkoc2YpICAgICAgICMgTG9hZGluZyBzaGFwZWZpbGVzIGZvciBiYWNrZ3JvdW5kCmxpYnJhcnkoZ2dwbG90MikKYGBgCgojIExvYWRpbmcgc3RvcmVkIGRhdGEgZnJvbSBwcmV2aW91cyB3b3JrZmxvdyBzdGVwcwpgYGB7cn0KZGF0YSgiSVNSSUMyMDExIikgIyByYXN0ZXIgbGlzdApkYXRhKCJzb2lsY2xhc3MiKSAjIHJhc3RlciBhdHRyaWJ1dGUgdGFibGUKZGF0YV9kaXIgPC0gc3lzdGVtLmZpbGUoImRhdGEiLCBwYWNrYWdlID0gInNvaWxQIiwgbXVzdFdvcmsgPSBUUlVFKQpleHRkYXRhX2RpciA8LSBzeXN0ZW0uZmlsZSgiZXh0ZGF0YSIsIHBhY2thZ2UgPSAic29pbFAiLCBtdXN0V29yayA9IFRSVUUpCmBgYAoKIyBMb2FkaW5nIEJhY2tncm91bmQgU2hhcGVmaWxlIGFuZCBTYXZpbmcgaXQgdG8gLlJkYXRhIGZvcm1hdApgYGB7cn0KR01CQV9maWxlIDwtIGZpbGUucGF0aChleHRkYXRhX2RpciwgIkdNQkEgbW91bnRhaW4gaW52ZW50b3J5X1YxLjEiLAogICAgICAgICAgICAgICAgICJHTUJBIG1vdW50YWluIGludmVudG9yeV9WMS4xLVdvcmxkLnNocCIpCm1vdW50YWluIDwtIHN0X3JlYWQoR01CQV9maWxlKQpzYXZlKG1vdW50YWluLCBmaWxlID0gIGZpbGUucGF0aChkYXRhX2RpciwibW91bnRhaW4uUkRhdGEiKSkKYGBgCgojIEltcG9ydGluZyAgbWFpemUgYWNjZXNzaW9uIGNvbGxlY3Rpb24gY29vcmRpbmF0ZXMKCmBgYHtyfQphY2NuX2ZpbGUgPC0gc3lzdGVtLmZpbGUoImV4dGRhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkYxUEFSRU5UUzEyMC5jc3YiLAogICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSA9ICJzb2lsUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0V29yayA9IFRSVUUpCmFjY25faW5mbyA8LSByZWFkLmNzdihhY2NuX2ZpbGUpCmFjY25faW5mbyRFbGV2YXRpb25fY2xhc3MgPC0gY2xhc3NpZnlfZWxldmF0aW9uKGFjY25faW5mbyRFbGV2YXRpb24pCmBgYAojIFVzaW5nIElTUklDIGRhdGEKYGBge3J9CklTUklDX1AgPC0gZXh0cmFjdF9QX0lTUklDKElTUklDMjAxMSRtYWluLCBhY2NuX2luZm8sIHNvaWxjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uID0gIkxvbmciLCBsYXQgPSAiTGF0IikKYGBgCgoKIyMgUGxvdHRpbmcgcGhvc3Bob3J1cyByZXRlbnRpb24gbWFwCgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KYmdfbWFwKCJMb25nIiwgIkxhdCIsIGRhdGEgPSBJU1JJQ19QJGdlb3JlZiwgYmcgPSBtb3VudGFpbikgKwogIGdndGl0bGUocGFzdGUwKCJBY2Nlc3Npb24gc2VsZWN0aW9uIGZvciBGMXMiKSkgKwogIGdlb21fcG9pbnQoYWVzKHggPSBMb25nLCB5ID0gTGF0LAogICAgICAgICAgICAgICAgIHNoYXBlID0gRWxldmF0aW9uX2NsYXNzLAogICAgICAgICAgICAgICAgIGNvbG91ciA9IG1haW4pLCAKICAgICAgICAgICAgICAgICBkYXRhID0gSVNSSUNfUCRnZW9yZWYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gSVNSSUNfUCRwYWwsCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiUGhvc3Bob3J1c1xuUmV0ZW50aW9uXG5Qb3RlbnRpYWwiLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBJU1JJQ19QJGJyZWFrcyApICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNiwgMTcpKSArCiAgdGhlbWUobGVnZW5kLmtleS5zaXplID0gdW5pdCgwLjUsICdsaW5lcycpKQoKYGBgCiMgVXNpbmcgT2FrIFJpZGdlIE5hdGlvbmFsIExhYm9yYXRvcnkgUGhvc3Bob3J1cyBNb2RlbCAKCmBgYHtyfQpuY19pbiA8LSBmaWxlLnBhdGgoZXh0ZGF0YV9kaXIsCiAgICAgICAgICAgICAgIkdMT0JBTF9QSE9TUEhPUlVTX0RJU1RfTUFQXzEyMjMiLAogICAgICAgICAgICAgICJkYXRhIiwgInBmb3Jtc19kZW4ubmMiKQoKT1JOTDIwMTMgPC0gYnJpY2tQKG5jX2luKQoKc2F2ZShPUk5MMjAxMyxmaWxlID0gZmlsZS5wYXRoKGRhdGFfZGlyLCJPUk5MMjAxMy5SRGF0YSIpKQpgYGAKCmBgYHtyfQpPUk5MX1AgPC0gZXh0cmFjdF9QX09STkwoT1JOTDIwMTMsIElTUklDX1AkZ2VvcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgbG9uID0gIkxvbmciLCBsYXQgPSAiTGF0IiApCmBgYAoKIyMgUGxvdHRpbmcgcGhvc3Bob3J1cyBhdmFpbGFiaWxpdHkgbWFwCgpgYGB7cn0KYmdfbWFwKCJMb25nIiwgIkxhdCIsIGRhdGEgPSBPUk5MX1AkZ2VvcmVmLCBiZyA9IG1vdW50YWluKSArCiAgZ2d0aXRsZShwYXN0ZTAoIkFjY2Vzc2lvbiBzZWxlY3Rpb24gZm9yIEYxcyIpKSArCiAgZ2VvbV9wb2ludChhZXMoeCA9IExvbmcsIHkgPSBMYXQsCiAgICAgICAgICAgICAgICAgc2hhcGUgPSBFbGV2YXRpb25fY2xhc3MsCiAgICAgICAgICAgICAgICAgY29sb3VyID0gbGFiKSwgCiAgICAgICAgICAgICBkYXRhID0gT1JOTF9QJGdlb3JlZikgKwogIHNjYWxlX2NvbG91cl9ncmFkaWVudG4obmFtZSA9ICJMYWJpbGUgSW5vcmdhbmljXG5QaG9zcGhvcnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91cnMgPSBPUk5MX1AkcGFsKDE4MCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDEsIDE4MCkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNiwgMTcpKQpgYGAKIyBDb21wYXJlIElTUklDIHZzIE9STkwKCmBgYHtyIH0KYm94cGxvdChsYWIgfiBtYWluLCBsYXMgPSAyLCBkYXRhID0gT1JOTF9QJGdlb3JlZiwKICAgICAgICBtYWluID0gcGFzdGUwKCJDb3JyZXNwb25jZW5jZSBiZXR3ZWVuIFBob3NwaG9ydXMgTWFwc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICJPUk5MIDIwMTMgVnMgSVNSSUMgMjAxMSIpLAogICAgICAgIHhsYWIgPSAiUGhvc3Bob3J1cyBSZXRlbnRpb24gUG90ZW50aWFsIE1haW4gQ2xhc3MiLAogICAgICAgIHlsYWIgPSAiTGFiaWxlIElub3JnYW5pYyBQaG9zcGhvcnVzIikKCgpwYWlycyhPUk5MX1AkZ2VvcmVmWyxjKCJhc2NlbmRpbmciLCBuYW1lcyhPUk5MMjAxMykpXSkKYGBg