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

#check the structure of the data
[email protected]

#simply plot it with random color
plot(countries, col = colorRampPalette(c("white", "red"))(nrow([email protected])))

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)

temp <- tempfile(fileext = ".zip")
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([email protected])))

### 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([email protected])+1)
nuts2_id = [email protected][,"NUTS_ID"]
value = runif(nrow([email protected]),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

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
font = 2)  # label font

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.