Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
python-visualization
GitHub Repository: python-visualization/folium
Path: blob/main/docs/advanced_guide/colormaps.md
1601 views
--- nbsphinx: hidden --- import folium

Using colormaps

A few examples of how to use folium.colormap in choropleths.

Let's load a GeoJSON file, and try to choropleth it.

import pandas import requests geo_json_data = requests.get( "https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_states.json" ).json() unemployment = pandas.read_csv( "https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_unemployment_oct_2012.csv" ) unemployment_dict = unemployment.set_index("State")["Unemployment"]

Self-defined

You can build a choropleth in using a self-defined function. It has to output an hexadecimal color string of the form #RRGGBB or #RRGGBBAA.

def my_color_function(feature): """Maps low values to green and high values to red.""" if unemployment_dict[feature["id"]] > 6.5: return "#ff0000" else: return "#008000"
m = folium.Map([43, -100], tiles="cartodbpositron", zoom_start=4) folium.GeoJson( geo_json_data, style_function=lambda feature: { "fillColor": my_color_function(feature), "color": "black", "weight": 2, "dashArray": "5, 5", }, ).add_to(m) m

StepColormap

But to help you define your colormap, we've embedded StepColormap in folium.colormap.

You can simply define the colors you want, and the index (thresholds) that correspond.

import branca.colormap as cm step = cm.StepColormap( ["green", "yellow", "red"], vmin=3, vmax=10, index=[3, 4, 8, 10], caption="step" ) step
m = folium.Map([43, -100], tiles="cartodbpositron", zoom_start=4) folium.GeoJson( geo_json_data, style_function=lambda feature: { "fillColor": step(unemployment_dict[feature["id"]]), "color": "black", "weight": 2, "dashArray": "5, 5", }, ).add_to(m) m

If you specify no index, colors will be set uniformly.

cm.StepColormap(["r", "y", "g", "c", "b", "m"])

LinearColormap

But sometimes, you would prefer to have a continuous set of colors. This can be done by LinearColormap.

linear = cm.LinearColormap(["green", "yellow", "red"], vmin=3, vmax=10) linear
m = folium.Map([43, -100], tiles="cartodbpositron", zoom_start=4) folium.GeoJson( geo_json_data, style_function=lambda feature: { "fillColor": linear(unemployment_dict[feature["id"]]), "color": "black", "weight": 2, "dashArray": "5, 5", }, ).add_to(m) m

Again, you can set the index if you want something irregular.

cm.LinearColormap(["red", "orange", "yellow", "green"], index=[0, 0.1, 0.9, 1.0])

If you want to transform a linear map into a step one, you can use the method to_step.

linear.to_step(6)

You can also use more sophisticated rules to create the thresholds.

linear.to_step( n=6, data=[30.6, 50, 51, 52, 53, 54, 55, 60, 70, 100], method="quantiles", round_method="int", )

And the opposite is also possible with to_linear.

step.to_linear()

Built-in

For convenience, we provide a (small) set of built-in linear colormaps, in folium.colormap.linear.

cm.linear.OrRd_09

You can also use them to generate regular StepColormap.

cm.linear.PuBuGn_09.to_step(12)

Of course, you may need to scale the colormaps to your bounds. This is doable with .scale.

cm.linear.YlGnBu_09.scale(3, 12)
cm.linear.RdGy_11.to_step(10).scale(5, 100)

At last, if you want to check them all, simply ask for linear in the notebook.

cm.linear

Draw a ColorMap on a map

By the way, a ColorMap is also a Folium Element that you can draw on a map.

m = folium.Map(tiles="cartodbpositron") colormap = cm.linear.Set1_09.scale(0, 35).to_step(10) colormap.caption = "A colormap caption" m.add_child(colormap) m