Spatial Visualization with R - Part 2 - ( Working with ShapeFiles)

Contact at , if you are looking for an Instructor Based Online Training or Corporate Training in R !

We are going to work with shapefiles  using R .


Shapefiles are a geospatial representation of data . The file format is developed by ESRI (GIS software company) . The shapefile format can store data in the form of points , lines, or polygons. Shapefiles are used to represent administrative borders like country , state , roads , rivers etc.

We are using raster package , it is used to download various administrative boundaries for any country . If you know ISO code for the country of interest , you can download shapefiles of the country and plot it.

We installed package "raster" as :


We load package "raster" as :


We are using getData() function to get shapefiles of country.


It is used to get geographic data for anywhere in the world. First , we download the data to store in the object .

The syntax of getData() is :

getData(name , download =TRUE , path=' ' , ...)

name - It used 'GADM' , 'countries' , 'SRTM', 'alt' and 'worldclim' values .

download - If its value is TRUE , data will be downloaded . If it is FALSE , we cannot download data files .

path - It indicates where to store the data . The default value is the current working directory .

country - It specifies by three letter ISO codes.

The name argument has different values .

If name is 'alt' or 'GADM' , you must provide 'Country=' argument .

We can see ISO codes of all countries by using following code :


If we are using name as "GADM"  , we must provide the level of administrative subdivision . If the level is 0 then it shows country-wise division , If level is 1 then it shows first level division .

If name is "SRTM" , we must provide 'lon' and 'lat' arguments . This represent SRTM tile between the numbers.

If name is "worldclim" , we must provide arguments var and resolution res. The valid values of var are 'tmin','tmax','prec' and 'bio' . The valid values of res are  0.5 , 2.5 , 5 and 10 .

Contact at , if you are looking for an Instructor Based Online Training or Corporate Training in R !

We want to represent France data in map. We first load the shapefile of France in france object . We used level = 0 gives only national boundaries .

france<-getData('GADM', country='FRA', level=0)  ##Get the Province Shapefile for France

Then , we plot france data  as :


We are using level = 1 to give the boudaries one level below the national boundaries . It gives province level boundaries .

france<-getData('GADM', country='FRA', level=1)


We are using level = 2 to give county boundaries.

france<-getData('GADM', country='FRA', level=2)  



We can also find map of Spain by using ISO code ESP .

spain<-getData('GADM',country='ESP' , level=1)


We want to plot map of Switzerland by using ISO code "CHE" . We used 'alt' method for name argument. We used mask argument as TRUE , it does not show neighboring countries in map .

x<-getData('alt', country='CHE', mask=TRUE)


We want to plot map of Spain  



Contact at , if you are looking for an Instructor Based Online Training or Corporate Training in R !


We can also plot world map in shape files as :

climate <- getData('worldclim', var='bio', res=2.5)

The variable "bio" in  var=bio , means it is extraction 19 layers of different bioclimatic variables at the lon/lat coordinates provided.

The code below returns a raster with the 18 bioclimate variables covering the whole world with a resolution of 2.5 minutes of degrees:

BIO1 = Annual Mean Temperature
BIO2 = Mean Diurnal Range (Mean of monthly (max temp – min temp))
BIO3 = Isothermality (BIO2/BIO7) (* 100)
BIO4 = Temperature Seasonality (standard deviation *100)
BIO5 = Max Temperature of Warmest Month
BIO6 = Min Temperature of Coldest Month
BIO7 = Temperature Annual Range (BIO5-BIO6)
BIO8 = Mean Temperature of Wettest Quarter
BIO9 = Mean Temperature of Driest Quarter
BIO10 = Mean Temperature of Warmest Quarter
BIO11 = Mean Temperature of Coldest Quarter
BIO12 = Annual Precipitation
BIO13 = Precipitation of Wettest Month
BIO14 = Precipitation of Driest Month
BIO15 = Precipitation Seasonality (Coefficient of Variation)
BIO16 = Precipitation of Wettest Quarter
BIO17 = Precipitation of Driest Quarter
BIO18 = Precipitation of Warmest Quarter
BIO19 = Precipitation of Coldest Quarter

climate <- getData('worldclim', var='bio', res=2.5)


plot(climate$bio1, main="Annual Mean Temperature")

We are giving an example of "SRTM" data to plot in map.

"SRTM" returns go elevation data .


The first argument specifies the dataset . 'GADM' returns the global administrative boundaries.

The second argument provides 'ESP' as the ISO code represents Spain.

The third argument specifies level of administrative subdivision . We used level equals to 0 for country specific boundary.

spain1<-getData("SRTM",lon=-5 , lat=42)

The first argument specifies SRTM go elevation data. The second argument specifies the lon(longitude) of the SRTM tile . The third argument specifies the lat(latitude) of the SRTM tile.


We plot SRTM data in map .

plot(spain,add=TRUE )

We add Spain boundaries by using "add" argument . We add title of the plot by using "main" argument.

We want to plot USA map .We can get shapefiles of USA by using getData() .

us<-getData('GADM', country='USA', level=2)  #Get the County Shapefile for the US

We plot USA map by using following code :


We can check the names of columns of us dataset .


We check the name of all states of USA .


We can plot state-wise plot of USA .

new<-subset(us,NAME_1=="Idaho" | NAME_1=="Nevada" | NAME_1=="California" | NAME_1== "Oregon")


We can plot Texas map as:




We create a subset of crime dataset. We want to see offense in our map . First , we check the list of offenses in crime data . We used unique() function to find unique values of offense.


We create a subset dataset violent_crimes which does not include offenses "robbery" , "rape" and "aggravated assault".

violent_crimes <- subset(crime, offense != "robbery" & offense != "rape" & offense != "aggravated                                assault")

We check the top observations of violent_crimes as :

We check the structure of violent_crimes . It shows 72461 observations and 17 variables .


We check the levels of offense variable in violent_crimes dataset .


When we check unique values of offense in violent_crimes data . It shows only four offenses.

We need to delete extra offenses of levels of offense variable .

violent_crimes$offense <- factor(  violent_crimes$offense, levels =c("murder", "burglary",

                                      "auto theft", "theft"))

Now , it shows only four offenses in our data .

We subset  lon and lat values in following code :

violent_crimes <- subset(violent_crimes,

                                            -95.39681 <= lon & lon <= -95.34188 &

                                              29.73631 <= lat & lat <= 29.78400)

We check the structure of violent_crimes data . It shows 5050 observations and 17 variables .



We check the top observations in violent_crimes dataset .

We set background theme by using theme_set() function .


We create a map plot of Houston area and we choose black-white color and used legend of offense to show in top left corner of map .

HoustonMap <- qmap("houston", zoom = 14, color = "bw", legend = "topleft")

We add points of latitude and longitude from the violent_crimes dataset in the map.

HoustonMap +

 geom_point(aes(x = lon, y = lat, colour = offense, size = offense),data = violent_crimes)

In above plot , we cannot see clearly which area can be highlighted for particular offense due to overplotting and point size . We cannot really get a feel for what crimes are taking place and where .

If we want to see average crime rate . We can get a good idea of the spatial distribution of violent_crimes by using a contour plot .  We used ggmap() function to plot raster object produced by get_map object.

Contact at , if you are looking for an Instructor Based Online Training or Corporate Training in R !

Contour Heat Maps

A contoured heat map is another way to demonstrate data density . The contour heatmap uses two-dimensional kernel density estimation in order to create the contoured heatmap of the spatial point data.

houston <- get_map(location = "houston", zoom = 13)

The syntax of ggmap() is -


ggmap - an object of class get_map

extent - space to plot the map  are - "normal" , "device" or "panel"

We want to plot the map in device of Houston area.

houstonMap<-ggmap(houston, extent = "device")       

To perform a two-dimensional kernel density estimation using sts_density2d() function .The arguments of stat_density2d are -

fill - fill area level-wise

alpha - visually down transparency for less important data .

bins - combine various data point together to form .  

geom - to describe  shape in map

scale_fill_gradient() - it is used to create two colour gradient (low - high)  


We will plot contour map over ggmap  as:

houstonMap +

 stat_density2d(aes(x = lon, y = lat, fill = ..level..,alpha=..level..), bins = 10, geom = "polygon", data = crime) +

 scale_fill_gradient(low = "black", high = "red")+

 ggtitle("Map of Crime Density in Houston")



Contact at , if you are looking for an Instructor Based Online Training or Corporate Training in R !


There are no entries yet.
Please enter the code
* Required fields

Visit our New Website by clicking the Logo Above or and you can earn as a Trainer - if interested in Delivering training or Contribute to the Learner Community by sending your own Blogs that will be posted here -

Subscribe to our mailing list

* indicates required

Looking for Corporate Training ? Reach out to us at

Reach out to us if you are looking for Corporate Training to Build The Next Generation Analytical Workforce with an in-depth understanding of  Exploratory Data Analysis , Data Visualisation, Data Analytics , AI First , Machine Learning & Deep Learning Training & Consulting helping them to take Data Informed Decision at each stage of the business. 

We understand that At the present times , the Entire Industry is in a Tranformation stage with the Softwares  being rebuilt with Artificial Intelligence Capabilities .

We need SMART WORKFORCE for the SMART SOFTWARES to reap the maximum return . 


Whatsapp at +91-9953805788 or email at - if you would like to know more . 


  • Corporate Tableau Training in Gurgaon
  • Corporate Data Analytics Training in Gurgaon
  • Corporate Microsoft Power BI Training in Gurgaon
  • Corporate Microstrategy Training in Gurgaon
  • Corporate Google Data Studio Training in Gurgaon
  • Corporate Python Training in Gurgaon
  • Corporate Advance Analytics in R Programming Training in Gurgaon
  • Corporate Machine Learning Training in Gurgaon
  • Corporate Deep Learning Training in Gurgaon
  • Corporate Data Visualization Training in Gurgaon



Instrovate Technologies

Noida, Gurgaon 

Hit Your Refresh Button To Rise Higher
Print Print | Sitemap
All rights reserved @ Instrovate Technologies

Terms Of Services    Privacy Policy    Disclaimer     Refund Policy