How to Make Stunning Interactive Maps with Python and Folium in Minutes | by Dario Radečić | Towards Data Science

Data visualization can be tricky to do right. If you have the design skills of a domestic turkey, this article might save the day.
Folium is a great library that does most of the heavy lifting for you. You only need to bring in the data. Today you’ll make your first interactive map, showing historical earthquakes near Fiji.
You’ll see how easy Folium is to use and understand through a lot of hands-on examples. This article alone will serve you as an excellent basis for more advanced visualizations.
Today you’ll learn how to:
Make a basic map with Folium
Change map type
Add and style markers
Add popups
To make any visualization with Folium, you’ll first have to install the library. Execute this line from the terminal:
pip install folium
With regards to the dataset, you’ll need something with geolocations (latitude and longitude). This dataset is a perfect candidate — it contains historical earthquake data near Fiji. Here’s how to load it with Python:
The first couple of rows look like this:
Just what you need — an earthquake dataset with geolocations and corresponding magnitudes. That’s all you need to make your first Folium map. Here’s the code:
Values for the location parameter were chosen after a quick Google search. Parameters width and height are optional – so don’t use them if you don’t want to.
Here’s how your first map looks like:
It’s okay, but it looks a bit boring. Let’s see how to change the map type next.
Folium comes with a couple of built-in tilesets. The default one looks horrible at sea, so let’s change it. You can pass any of the following to the tiles keyword:
OpenStreetMap
Mapbox Bright
Mapbox Control Room
Stamen Terrain
Stamen Toner
Stamen Watercolor
CartoDB positron
CartoDB dark_matter
There are others, but they require an API key. That’s a bit out of the scope for today. Let’s see how Stamen Terrain looks like:
Better — at least at sea.
The map still doesn’t display any earthquake data. Let’s change that next.
You’ll need to write a loop to add markers. A goal is to iterate through the dataset and add a marker for every latitude and longitude pair.
Sounds easy enough, so let’s do it:
Here are the results:
These look awful. I’m not a fan of opaque blue markers and hope you aren’t either.
What if you want to color the markers based on the magnitude? Here’s an idea:
If a magnitude is 5 or below, make the marker yellow and almost fully transparent (a lot of smaller earthquakes)
If a magnitude is above 5, make the marker read and 100% opaque (not so many of these)
Let’s declare a function called generate_color() that returns outline color, fill color, outline opacity, and fill opacity based on the magnitude.
Everything else stays roughly the same, with some minor changes in the loop. You can also see how to change the size of the marker. It’s specified with the radius parameter:
Here’s the corresponding map:
Now we’re getting somewhere! I’m a complete idiot when it comes to combining two or (god forbid) more colors. I’m sure you can do a better job here.
There’s still one problem — the map isn’t interactive. Sure, you can zoom and drag, but nothing happens when you click on a marker. Popups can change that.
Let’s say you want to see earthquake magnitude and depth each time you click on a marker. One way to approach this is by declaring a function that returns HTML code showing both.
The generate_popup() function does just that. It also bolds the keywords:
Here’s the corresponding map:
That’s all you should know about making basic maps. There are more advanced things you can do, but this is enough to get you started.
The Folium library isn’t the only option for making maps. You can do mostly the same things with Plotly, which is a more “complete” data visualization library.
Which one do you prefer? Folium or Plotly? Let me know in the comment section.
Loved the article? Become a Medium member to continue learning without limits. I’ll receive a portion of your membership fee if you use the following link, with no extra cost to you.