My #30DayMapChallenge

November 01, 2019

After #Inktober, Finnish cartographer Topi Tjukanov launched #30DayMapChallenge, a challenge to make a different map each day of November.

I’m just going to have a go at this. I’ll probably wont make one each day, but it is a nice occasion to publish some half baked ideas I have lingering on my computer, to learn a thing are two, and most of all, just have some mapping fun :)

So whenever I make a new map for the challenge, it will be added to this page.

Challenge 14: boundaries

Data: Municipal boundaries of Belgium, and a self drawn line

Tool: QGIS

Goal: Showing the complexity of the boundaries of the municipality of Baarle-Hertog

Challenge 13: tracks

Data: My own Runkeeper tracked runs

Tool: The Strava R package by Marcus Volz, ggplot2, Illustrater and AI2html

Goal: Show my running habits over the (almost) last 5 years

How I did it: I downloaded my data from Runkeeper and generated the small multiple tracks from it with the Strava package and ggplot, based on this script (I set the colors to represent the distance ran). I imported the generated png file in Adobe Illustrator and added all the annotions (browsing my running history was a lot of fun!). Then I used AI2html to generate the image with the annotations overlayed as html and css.

See the full piece here (zoom your browser if the font is too small, sorry for that)

Challenge 12: movement

Data: TravelTime Platform

Tool: TravelTime Platform app

Goal: comparing how far I can travel in 1 hour by 3 modes of transport, starting from my local train station

How I did it: I just used the nice TravelTime Platform app (which has a very nice UI, I think)

Challenge 11: elevation

Data: Digitaal Hoogtemodel Vlaanderen II, DTM, raster, 1 m

Tool: QGIS

Goal: Showing one of the most spectacular geographical features of my region: the Flemish spoil tips

How I did it: The terrain is a digital elevation model with a resolution of 1 meter, which I used to create the hillshade in QGIS. A duplicate of the layer is used for the colors, which maps the elevation to the PuOr diverging color scale. The contour lines are generated from a dem with a 5 meter resolution, with the Raster => Extraction => Contour tool in QGIS. I removed all contour lines not directly on the spoil tips, and labelled them with their elevation. The titles were added in Illustrator.

Hi-res versions

Challenge 10: black and white

Data: OpenStreetMap

Tool: Figuregrounder

Goal: Comparing streets layout and built up area in cities of which the names start with a ‘B’

How I did it: Just search the map, center it, and select a circle radius. I used 2km for all the maps.

Challenge 9: yellow

Data: OpenStreetMap

Tool: Mapbox

Goal: Make a yellow map of the Belgian municipality of Geel, which name means “yellow” in Dutch

How I did it: With the Mapbox monochrome styling. See the interactive map here.

Challenge 8: green

Data: Trees in public space in Antwerp

Tool: QGIS

Goal: Finally making one of those c̶l̶i̶c̶h̶é̶ classic tree maps

How I did it: The geo portal serving the data had a little difficulty giving me the data, so I reached out to the people managing the Antwerp geoportal. They sent me this wonderfull data set over email. I’ll probably make a proper interactive ‘Trees of Antwerp’ map later. Here

  • each shade of green is different genus of trees
  • size of the tree crowns are proportional to stem diameters
  • I added some shadow under the trees to make them stand out

Inspiration: I’ve always wanted to replicate one of my most fav maps ever: Trees of Türkenschanzpark by Markus Mayr

Challenge 7: red

Data: NOAA Gridded Global Temperature

Tool:: R/ggplot2

Goal: Make a Hovmöller diagram of average global temperature over time, by longitude and latitude

How I did it: The hardes part was converting the source data into something to work with. After that, I used ggplot’s geom_tile() to make the plots, and geom_vline() and geom_hline() to add the prime meridian and the equator

Challenge 6: blue

Data: DEM Flanders 25 meter and Vlaamse Hydrografische Atlas

Tool: QGIS

Goal: Showing the Flemish hydrography, in a blue fashion. (Yes, Flemish: notice the hole that is Brussels on the map. For many of the government data in my country, you need to consult 3 different government agencies (Flemish, Brussels and Walloon), and the data will most likely not be comparable, if it exist at all)

How I did it: A digital elevation model with a blue color gradient, with dark blue meaning lower elevation, underneath the waterways, of which the thickness is scaled to their importance.

You can find a higher resolution version of the map here.

Challenge 5: raster

I’m cheating a little bit with this challenge: this is something that was published over a week ago :)

Data: Luchtfoto Vlaanderen 1971, zomer - zwart-wit

Tool: Mapbox

Goal: Comparing aerial imagery from almost 50 years ago to today’s. The map was part of a series of articles by Flemish newspaper De Standaard on the poor spatial planning in Flanders.

How I did it: read all about it in the making of post

Challenge 4: hexagons

Data: World War II THOR Database

Tool: R/ggplot2, GIMP to make the animated gif

Goal: show the shifting front and the intensification of allied bombings during World War II

How I did it: Natural Earth data for the background map, geom_hexbin for the hexagons. I made one map for every month, loaded all the maps in GIMP and exported it as an animated gif.

Challenge 3: polygons

Data: Agglomeraties 200m, Statbel

Tool: QGIS + Illustrator

Goal: show the big city that Flanders actually is

How I did it: Very basic styling of polygon shapefiles, with some inner glow and drop shadow.

Challenge 2: lines

Data: Air passenger transport between the main airports of Belgium and their main partner airports (Eurostat)

Tool: R + ggplot2

Goal: see how Belgian airports are connected to foreign airports

How I did it: I used the eurostat R package to get data about the number of commercial flights between Belgian and foreign airports. The hardest part was then to geocode all the airports to their actual location. After that, I used the rnaturalearthdata package to get the baselayer data, and plotted everything on the map with ggplot (with geom_sf() for the countries, geom_segment() for the lines, and geom_point() for the airports).

These are the connections for all Belgian airports, units are total number of commercial flights between both cities, in 2018.

A zoomed in version, to better see the European connections:

Because this is all in script, it is very easy to do for other countries:

If you have a request for any European country, just let me know!

Challenge 1: points

Data: Global Power Plant Database

Tool: Flourish

Goal: map all power plants in Europe, by source of fuel

Inspiration: Mapping how the United States generates its electricity by The Washington Post

How I did it: I took the data from the Global Power Plant Database and with a little R script, I filtered out the plants in European countries. I uploaded the data to the Projection map - Europe (countries) template in Flourish. Then it was just a matter of styling the map a little bit.

Notice that Russia is not part of the country layer in this Flourish map template. But I’m going to leave it at that.

One powerful thing that you can do with Flourish is creating stories: slide decks that you can use to highlight different aspects of your data. In the map template, the color legend serves as filter, so creating the following little story was quite easy:

So challenge 1: done!