This page shows how to make a chloropleth map with ggplot2 from geoJSON data. To make a chloropleth map you need two inputs:

  • A geospatial object that provides the boundaries of the geographic units that interest you. Here, we will consider the city districts of the south of France. Data are available at the geoJSON format. Data come from here, and this post explain in detail how to read and represent geoJSON format with R.
  • A numerical variable that we use to color each geographical unit. Here we will use the number of restaurant per city. The data has been found here. (Thanks @joelgombin).


Step 1: Read the geoJSON object


This step has been extensively describe in the chart #325. The geojsonio library allows to read this type of format in R. To plot it with ggplot2, we first need to transform it to a data frame using the tidy function of the broom library. Then, the geom_polygon() function allows to represent this type of object !



Step 2: Read the numerical variable


The number of restaurant per city district has been found on the internet and a clean version is stored on the gallery website. It is thus easy to read it with read.table. Before doing a chloropleth map, it is a good practice to check the distribution of your variable.


Here, we have a ‘long tail’ distribution: a few cities have a lot of restaurant. Thus we will probably need to apply a log scale to our color palette. It will avoid that all the variation is absorbed by these high values.




Step 3: Merge them together

This is a key step in chloropleth map: your 2 inputs must have a id in common to make the link between them!


Step 4: Make a basic chloropleth




We can make a first basic chloropleth map. We just need to add fill = our value in the aesthetic of our polygons.





Step 5: improve this chloropleth

There is a bit of work to do to get a descent figure. We need to change the color palette, improve the legend, use a log scale transformation for the colorscale, change background and add titles and explanation. Here is the code to do that, and the final result!


Another great example made with ggplot2 from geoJSON data is this Swiss map made by Timo Grossenbacher.



Leave a Reply

Be the First to Comment!

Notify of