Mapping in R

This post will be a significant consideration for ecologists/biologists or beginners in geoinformatics to plot their study locations with less effort. The same thing can be done on surfer, qgis, or in Arcgis, but here in R you can fine tune your charts with multiple layers. Before we start, we have to set  basic knowledge in mapping and geographical information systems.

Vector and raster data

You might have heard this, like. . . .”this is a vector data, or you have to extract the raster data points”. What it really is a simple logic. All the maps are in a 2D plane, such as x and y, like images. Images/maps have pixel values to represent the points/grids/cells are called raster data, whereas vector data are pairs of values which represent particular shapes such as roads, country borders. In mapping we use both layer by layer to satisfy the data visualization.

Download your data

There are plenty of open source data sets readily available, most of them are free too. Natural earth and open street maps are the most popular among these. However, the best way to start mapping is by using the data sets in R itself, which can be accessed by the package Rworldmap. The Rworld map plots are more similar to surfer maps(lines with filled colours). For more asthetic look you have to incorporate the multiple raster images from above mention sources. Any way lets start with Rworld map.

image.pngIt is a better option to install both rworldmap and rworldextra , for higher resolution maps and you can install it by  a single click using  spaces in between them.

Install the  module ‘maps’

you can easily install the ‘maps’ module by type inside repository dialogue shown above. ‘maps’ are the easy way to plot filled, or nonfilled maps.

Mount all the  modules  by


Now you can plot the world map by simply typing



This is a full representation of available map data in the package Rworldmap. Most often you need not plot the entire world, but a part of it. This could be achieved by different ways.Suppose you want to plot India, type the code:

#Simply plot India
#Make it more awesome
map("world","India",col = "grey",fill = TRUE)



Researchers mostly need to specify the coordinates, which make more detailed representation of study area/Area of interest. To attain this, create a dataset using map.

#Create location from map
loc<- map("world","India",col = "grey",fill = TRUE)
#plot the location with labels
#Add grey
map("world","India",col = "grey",fill = TRUE,add=TRUE)



To get more on realistic mapping representaion we need to use x and y limits. Suppose if we want to plot south eastern part of India.

map("world","India",col = "grey",fill = TRUE,add=TRUE)


Plotting your locations

Now your map is ready! and this is the time to add your sample points/locations. For this you need to have the coordinates: latitudes and Longitudes. As you are plotting the locations on a 2D plain, you need to convert it to decimals, and this is very important. Here we are going to done this with a dummy data.

longitude latitude
1   73.67016 13.84322
2   72.67729 13.84322
3   71.59416 13.84322
4   70.48094 13.84322
5   74.51259 11.97489
6   72.94807 11.97489
7   72.37642 11.93514
8   70.93225 11.93514
9   76.04702 10.18606
10  75.02407 10.18606
11  73.12859 10.30531
12  71.74460 10.06680

  You could see that the data points are in decimals, and be sure it is. Let’s start the add the points to map(I expect that your map is still on your map panel).


mappoin.jpgThat’s it, your sampling locations ready. But still you find some asthetic emptiness in your map. This could be overcome by a adding various datasets like bathymetry, remote sensing data sets or your own gridded/contour data sets. Lets have look what we can do.

#Load the bathymetry data from NOAA using marmap
library(marmap)#if it is not in your package list install it simply by marmap on the dialog box
bathydata<- getNOAA.bathy(70,80,8,22)#Be sure the locations are same
#Make some colour combinations.Here I took blues and greys

blues <- c("lightsteelblue4", "lightsteelblue3",
 "lightsteelblue2", "lightsteelblue1")
greys <- c(grey(0.6), grey(0.93), grey(0.99))
#Now plot the data 'bathydata' with the colours we created
plot(bathydata, image = TRUE, land = TRUE, lwd = 0.03,
 bpal = list(c(0, max(bathydata), greys),
 c(min(bathydata), 0, blues)))
#Add the map overlay
map("world","India",col = "grey",fill = TRUE,add=TRUE,xlim=c(70,80),ylim=c(8,22))
#make thickened contour lines
plot(bathydata, n = 4, lwd = 0.4, add = TRUE)
#Add your sampling points(pch=25 makes it inverted triangles)
title("My Sampling Locations")


Yes, now this is a publication quality location map. As I have explained it in a very few lines you will be confused about using the bathymetry datasets, . But I assure that the coming series of my tutorials  will make you able to use external datasets in maps .


Written by mishahu ecosmith

A student in science, fascinated in Philosophy, Maths and Painting. My writings are focused on promoting open source technologies for better research and want to make a knowledge inventory to accelerate amateur research.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s