Metis comes with a set of preloaded maps. A full list of metis maps is available at colors, maps and params. The pre-loaded maps all come with each polygon labelled in a subRegion column. For each map the data contained in the shapefile and the map itself can be viewed as follows:
Example View of Pre-loaded Map for US49
metis.mapsProcess
will search through the list of pre-loaded metis maps to see if it can find the “subRegions” provided in the data and then plot the data on those maps. Some examples are provided below:
library(metis) data = data.frame(subRegion=c("CA","FL","ID","MO","TX","WY"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
US49
US49 Outputs structure
library(metis) data = data.frame(subRegion=c("AK","FL","ID","MO","TX","WY"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
US52
library(metis) unique(mapUS49County@data$subRegion) # Check subRegion Names unique(mapUS49County@data$subRegionAlt) # Check Alternate names data = data.frame(subRegion=c("Pender_NC","Larue_KY","Jim Wells_TX","Orange_IN","Putnam_FL","Ellis_KS"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", nameAppend = "_Alt", mapTitleOn = F)
US49 Counties
library(metis) unique(mapUS52County@data$subRegion) # Check subRegion Names unique(mapUS52County@data$subRegionAlt) # Check Alternate names data = data.frame(subRegion=c("Aleutians West_AK","Sabana Grande_PR","Kalawao_HI","Orange_IN","Putnam_FL","Ellis_KS"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", nameAppend = "_Alt", mapTitleOn = F)
US52 Counties
library(metis) unique(mapGCAMBasins@data$subRegion) # Check Available Regions data = data.frame(subRegion=c("Colombia","China","EU-12","Pakistan","Middle East","Japan"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
GCAM 32 Regions
library(metis) unique(mapGCAMBasins@data$subRegion) # Check Available Regions data = data.frame(subRegion=c("Negro","La_plata","Great","New_England","Indus","Zambezi"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
GCAM Basins
library(metis) unique(mapCountries@data$subRegion) # Check Available Regions data = data.frame(subRegion=c("Colombia","China","India","Spain","Ghana","Iran"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
World Countries
library(metis) unique(mapStates@data$subRegion) # Check Available Regions data = data.frame(subRegion=c("Punjab","FL","TX","Faryab","Assam","Lac"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, folderName = "vignetteMaps", mapTitleOn = F)
World States
Sometimes subRegions can be present on multiple maps. For example “Colombia”, China" and “India” are all members of metis::mapGCAMReg32
as well as metis::mapCountries
. If a user knows which map they want to plot their data on they should specify the map in the subRegShape
argument.
library(metis) data = data.frame(subRegion=c("Colombia","China","India"), x=c(2050,2050,2050), value=c(5,10,15)) # Auto selection by metis will choose metis::mapCountries metis.mapsProcess(polygonTable=data, folderName = "vignetteChooseMap", mapTitleOn = F) # User can specify that they want to plot this data on metis::mapGCAMReg32 metis.mapsProcess(polygonTable=data, subRegShape = metis::mapGCAMReg32, folderName = "vignetteChooseMap", nameAppend = "Chosen", mapTitleOn = F)
Select Pre-Loaded Map
library(metis) data = data.frame(subRegion=c("AK","HI","PR","MO","TX","WY"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, subRegShape=metis::mapUS52Compact, folderName = "vignetteMaps", mapTitleOn = F)
US52Compact
library(metis) unique(mapUS52CountyCompact@data$subRegion) # Check subRegion Names unique(mapUS52CountyCompact@data$subRegionAlt) # Check Alternate names data = data.frame(subRegion=c("Aleutians West_AK","Sabana Grande_PR","Kalawao_HI","Orange_IN","Putnam_FL","Ellis_KS"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, subRegShape=metis::mapUS52CountyCompact, folderName = "vignetteMaps", nameAppend = "_Alt", mapTitleOn = F)
US52 Counties Compact
Users can provide metis.mapsProcess custom shapefiles for their own data if needed. The example below shows how to create a custom shapefile and then plot data on it.
library(metis); library(rgdal) shapeSubset <- metis::mapStates # Read in World States shape file shapeSubset <- shapeSubset[shapeSubset@data$region %in% c("Colombia"),] # Subset the shapefile to Colombia shapeSubset@data <- droplevels(shapeSubset@data) shapeSubset@data <- shapeSubset@data %>% dplyr::rename(states=subRegion) # Lets assume the subRegion column was called "states" metis.map(shapeSubset,fillCol="states") # View custom shape head(shapeSubset@data) # review data unique(shapeSubset@data$states) # Get a list of the unique subRegions # Plot data on subset data = data.frame(states=c("Cauca","Valle del Cauca","Antioquia","Córdoba","Bolívar","Atlántico"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, subRegShape = shapeSubset, subRegCol = "states", subRegType = "ColombiaStates", folderName = "vignetteMaps_shapeSubset", mapTitleOn = F)
Shape subset
For example if someone wants to analyze counties in Texas.
library(metis); library(raster) shapeSubRegions <- metis::mapUS49County shapeCropTo <- metis::mapUS49 shapeCropTo <- shapeCropTo[shapeCropTo@data$subRegion %in% c("TX"),] shapeCropTo@data <- droplevels(shapeCropTo@data) shapeCrop<- sp::spTransform(shapeCropTo,raster::crs(shapeSubRegions)) shapeCrop <-raster::crop(shapeSubRegions,shapeCropTo) shapeCrop@data <- shapeCrop@data%>%dplyr::select(subRegion) shapeCrop$subRegion%>%unique() # Check subRegion names metis.map(shapeCrop) # Plot data on subset data = data.frame(county=c("Wise_TX","Scurry_TX","Kendall_TX","Frio_TX","Hunt_TX","Austin_TX"), x=c(2050,2050,2050,2050,2050,2050), value=c(5,10,15,34,2,7)) metis.mapsProcess(polygonTable=data, subRegShape = shapeCrop, subRegCol = "county", subRegType = "TexasCounties", folderName = "vignetteMaps_shapeCrop", mapTitleOn = F)
Shape Crop
By setting the cropToBoundary argument to T the function will crop your map to the regions with data provided. This is particularly helpful for data plotted on the world maps as shown in the example below:
library(metis) data = data.frame(subRegion = c("India","China"), year=c(2010,2010),value = c(32,54)) metis.mapsProcess(polygonTable = data, mapTitleOn = F, folderName = "vignetteMaps", cropToBoundary=F, ) metis.mapsProcess(polygonTable = data, mapTitleOn = F, folderName = "vignetteMaps", cropToBoundary=T, nameAppend="Cropped")
Crop to Boundary
By turning on extension a background layer will be added to any shape map.
library(metis) data = data.frame( subRegion = c("India","China"), year=c(2010,2010), value = c(32,54)) metis.mapsProcess(polygonTable = data, mapTitleOn=F, folderName = "vignetteMaps", cropToBoundary =T, extension = T, nameAppend="Extended") # Can increase the extnded boundaries by using expandPercent metis.mapsProcess(polygonTable = data, mapTitleOn=F, folderName = "vignetteMaps", cropToBoundary =T, extension = T, nameAppend="Extended10", expandPercent = 50)
Extended Background
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), year = c(rep(2025,5), rep(2050,5), rep(2075,5), rep(2100,5)), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45, 23, 99, 102, 85, 75, 12, 76, 150, 64, 90)) metis.mapsProcess(polygonTable = data, folderName ="multiYear", cropToBoundary=T, extension = T )
Multi-year
Multi-year Animation
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), class = c(rep("municipal",5), rep("industry",5), rep("agriculture",5), rep("transport",5)), year = rep(2010,20), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45, 23, 99, 102, 85, 75, 12, 76, 150, 64, 90)) metis.mapsProcess(polygonTable = data, folderName ="multiClass", cropToBoundary=T, extension = T )
Multi-class
With multiple scenarios assigning a scenRef calculates the absolute and percentage difference between the different scenarios and stores them in corresponding folders.
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), scenario = c("scen1","scen1","scen1","scen1","scen1", "scen2","scen2","scen2","scen2","scen2", "scen3","scen3","scen3","scen3","scen3"), year = rep(2010,15), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45, 40, 44, 12, 30, 99)) metis.mapsProcess(polygonTable = data, folderName ="multiScenario", cropToBoundary=T, extension = T, scenRef="scen1", scenDiff=c("scen3"))
Multi-Scenario Diff
Multi-Scenario Diff Folders
With multiple years assigning a xRef calculates the absolute and percentage difference between the different years and stores them in corresponding folders.
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), year = c(rep(2010,5),rep(2020,5),rep(2030,5)), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45, 40, 45, 12, 50, 63)) metis.mapsProcess(polygonTable = data, folderName ="multiYear", cropToBoundary=T, extension = T, xRef=2010, xDiff = c(2020))
Multi-Year Diff
Multi-Year Diff Folders
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), scenario = c("scen1","scen1","scen1","scen1","scen1", "scen2","scen2","scen2","scen2","scen2"), year = rep(2010,10), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45)) metis.mapsProcess(polygonTable = data, folderName ="scaleRange", cropToBoundary=T, extension = T, scenRef="scen1", scaleRange = c(0,50), scaleRangeDiffAbs = c(-100,100), scaleRangeDiffPrcnt = c(-60,60))
Scale Range
Can use any R color palette or choose from a list of metis color palettes at colors, maps and params.
library(metis) data = data.frame(subRegion = c("Austria","Spain", "Italy", "Germany","Greece", "Austria","Spain", "Italy", "Germany","Greece"), scenario = c("scen1","scen1","scen1","scen1","scen1", "scen2","scen2","scen2","scen2","scen2"), year = rep(2010,10), value = c(32, 38, 54, 63, 24, 37, 53, 23, 12, 45)) metis.mapsProcess(polygonTable = data, folderName ="colorPalettes", cropToBoundary=T, extension = T, scenRef="scen1", classPalette = "pal_wet", classPaletteDiff = "pal_div_BrGn")
Color Palettes
GCAM results can be read using metis.readgcam to get the data directly into the format ready for mapping. In this example the preloaded GCAM output metis::exampleGCAMproj
is used to extract data for chosen parameters from the parameter list. USers can provided a path to their gcam database folder.
Note: The exampleGCAMproj comes with only a few parameters: “elecByTechTWh”,“pop”,“watWithdrawBySec”,“watSupRunoffBasin”,“landAlloc” and “agProdByCrop”
library(metis) # Read in data from the example Proj file data <- metis.readgcam ( #gcamdatabase = “Path_to_GCAMdatabase”, dataProjFile = metis::exampleGCAMproj, scenOrigNames = c("GCAM_SSP5","GCAM_SSP3"), scenNewNames = c("SSP5","SSP3"), paramsSelect = c("landAlloc", "elecByTechTWh","watSupRunoffBasin","pop"), # From Param list ?metis.readgcam regionsSelect = c("India","China","Pakistan")) df <- data$data; df dfParam <- data$dataAggParam; dfParam dfClass1 <- data$dataAggClass1; dfClass1 dfClass2 <- data$dataAggClass1; dfClass2 # Plot data aggregated by param metis.mapsProcess(polygonTable = dfParam, folderName ="GCAMbyParam", cropToBoundary=T, extension = T, xRange = c(2010,2020,2030,2040), scenRef="SSP3", scaleRange = data.frame(param=c("landAlloc", "elecByTechTWh","watSupRunoffBasin","pop"), min = c(0,0,0,0), max = c(10000,15000,2000,2000))) # Plot data aggregated by Class1 metis.mapsProcess(polygonTable = dfClass1, folderName ="GCAMbyClass", cropToBoundary=T, extension = T, xRange = c(2010,2020,2030,2040), scenRef="SSP3")
GCAM Outputs Folder Structure
GCAM Maps by Param (Selected)
GCAM Maps by Param Animations (Selected)
Pop | Electricity (TWh) |
---|---|
Land Allocation | Water Withdrawals |
---|---|
GCAM Maps by Class (Selected)
GCAM Maps by Class Animations (Selected)
Electricity (TWh) | Land Allocation |
---|---|