As you can see by googling, there are millions of packages, methods, contents, strategies, etc to work with geographical Data in R. In this series of post, I will present some of them, directly taken from my own experience. I will try to follow an increasing difficulty order. Of course, the more complex methods are more flexible and provide more alternatives.
In this case, we will keep it really simple and draw an infomap of a part of South America. Infomaps are very useful as they are widely spread and clear way of interpreting Data related to geographical zones. Infomaps have a double advantage: They are very clear to understand, but, as it is not feasible to do it easily in Excel, it is always impactful if you include one in a presentation.
Below you will find the R Code for a really simple approach. I hope you like it. Any comments, corrections or critics please write!!
library(‘maps’)
library(‘mapdata’)
library (‘RColorBrewer’)
DB <- as.matrix(c(‘Argentina’, ‘Brazil’, ‘Chile’, ‘Uruguay’, ‘Paraguay’, ‘Bolivia’, ‘Peru’))
#add population-density Data
DB <- cbind (DB, c(15,23,22,19,17,10,24))
#create a gradual palette of Reds. Function belongs to RColorBrewer
gama <- brewer.pal(6,”Reds”)
countries <- as.character(DB[,1])
# with the cut function you can assign numeric values to a certain interval defined by the user (in this case 0,5,10,15,20,max(DB))
DB <- cbind(DB, cut (as.numeric(DB[,2]),c(0,5,10,15,20,max(DB)),labels = FALSE, right = TRUE))
#With the ordinal values assigned to each country, we now create a character array with the colour code corresponding to each of them, based upon the palette we have created
col <- character()
for (i in 1:nrow(DB))
{
col <- append(col,gama[as.numeric(DB[i,3])])
}
#We draw the map. Please note that the arrays countries and col need to be maintained in the same order. If not, the colour assigned to each country will be wrong. So, be careful if you need to sort the values of any array before plotting.
map(‘worldHires’,countries,fill=TRUE,col=col,plot=TRUE, cex = 15, exact=TRUE)
legend(“bottomright”, c(“up to 15”, “16 – 17”, “18 – 19”, “20-21”, “22-23”, “more than 23”),border=gama, fill = gama, cex = 1.3, box.col = “white”)
#Although RStudio (I do not know of other interfaces) provides an interface option to import a plot to a file, if you have to export the map, I would advise doing it per CLI, as the sizes and proportions are much easier to handle. In this case, it would be as follows:
png(file= (your Path),width = (width in pixels), height = (height in pixels), res = 120)
map(‘worldHires’,countries,fill=TRUE,col=col,plot=TRUE, cex = 15, exact=TRUE)
legend(“bottomright”, c(“up to 15”, “16 – 17”, “18 – 19”, “20-21”, “22-23”, “more than 23”),border=gama, fill = gama, cex = (the size you want for the box), box.col = “white”)
dev.off()
This is the final result
I made the same things for Italian primary elections here: http://taffey6977.blogspot.it/2012/12/mappe-delle-preferenze-alle-primarie.html
Interesting… a slightly different approach but the same result. Nice!
Pingback: Working with geographical Data. Part 1: Simple National Infomaps | Nutrientes esenciales para el espíritu
This is very nice. I think you can share it on the R Programming Wikibooks (http://en.wikibooks.org/wiki/R_Programming). Wikibook is similar to wikipedia but for handbooks. It is very nice for learning and sharing your programming tricks. I’ve been developping the R programming wikibooks alone for a few years. I would be happy to collaborate with other people. You can add it on the data visualisation page : http://en.wikibooks.org/wiki/R_Programming/Graphics#Maps
Cheers
Nice idea… did not know about that wiki 😀
Thanks a lot for your comment!!