Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
There are many opportunities to find maps which are good for R, also You can easily find country level maps.
TIP1: GADM database + basic plot function
For example GADM is an awesome site, You can freely download any country map in a format of SpatialPolygonsDataFrame. Most of the countries has multiple levels.
Here is a simple example: (I will use map of Hungary through the whole example)
#load the data download.file("http://biogeo.ucdavis.edu/data/gadm2.8/rds/HUN_adm1.rds", "HUN_adm1.rds", mode = "wb") countries = readRDS("HUN_adm1.rds") #check the structure of the data countries@data #simply plot it with random color plot(countries, col = colorRampPalette(c("white", "red"))(nrow(countries@data)))
TIP2: googleVis
Also there is a cool interactive web-based solution thanks to Google (and of course the creators of googleVis package) which also supoorts most of the countries:
library(googleVis) library(sp) #create random database with county codes countyName = c("HU-BU", "HU-BK", "HU-BA", "HU-BE", "HU-BZ", "HU-CS", "HU-FE", "HU-GS", "HU-HB", "HU-HE", "HU-JN", "HU-KE", "HU-NO", "HU-PE", "HU-SO", "HU-SZ", "HU-TO", "HU-VA", "HU-VE", "HU-ZA") randomData = runif(length(countyName),0,100) exampleData <- data.frame(countyName, randomData) GeoMaps <- gvisGeoChart(exampleData, "countyName", "randomData", options=list(region="HU", displayMode="regions", resolution="provinces", width=600, height=400)) plot(GeoMaps)
TIP3: Eurostat geodata + basic plot function
But it was really hard to find a NUTS2 level country maps for me, but finally I came across the geodata of Eurostat. I recommend to use the 1:1 Million scale if You want to plot countries.
library(rgdal) #download the file temp <- tempfile(fileext = ".zip") download.file("http://ec.europa.eu/eurostat/cache/GISCO/geodatafiles/NUTS_2013_01M_SH.zip", temp) unzip(temp) #load the data and filter it to Hungary and NUTS2 level EU_NUTS = readOGR(dsn = "./NUTS_2013_01M_SH/data", layer = "NUTS_RG_01M_2013") map_nuts2 <- subset(EU_NUTS, STAT_LEVL_ == 2) # set NUTS level country <- substring(as.character(map_nuts2$NUTS_ID), 1, 2) map <- c("HU") # limit it to Hungary map_nuts2a <- map_nuts2[country %in% map,] #plot it plot(map_nuts2a, col = colorRampPalette(c("white", "red"))(nrow(map_nuts2a@data)))
Bonus!
When I used the geodata for my project I also used the cartography package which is an easy-to-use map creator.
Here is a small example how You can use it:
library(cartography) plot(map_nuts2a) cols <- carto.pal(pal1 = "green.pal", n1 = nrow(map_nuts2a@data)+1) nuts2_id = map_nuts2a@data[,"NUTS_ID"] value = runif(nrow(map_nuts2a@data),0,50) hun_nuts2_df = data.frame(nuts2_id, value) choroLayer(spdf = map_nuts2a, # SpatialPolygonsDataFrame of the regions df = hun_nuts2_df, # target data frame var = "value", # target value breaks = c(0,5,10,15,20,25,30,35,100), # list of breaks col = cols, # colors border = "white", # color of the polygons borders lwd = 2, # width of the borders legend.pos = "right", # position of the legend legend.title.txt = "", legend.values.rnd = 2, # number of decimal in the legend values add = TRUE) # add the layer to the current plot labelLayer(spdf = map_nuts2a, # SpatialPolygonsDataFrame used to plot he labels df = hun_nuts2_df, # data frame containing the lables txt = "nuts2_id", # label field in df col = "black", # color of the labels cex = 0.9, # size of the labels = 2) # label
Please write it down if You have an other source of NUTS2 level geodata which is also compatible with R especially if there is a (interactive) JavaScript based solution.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.