Hi folkes,

Following a question by Gui on this website, I checked the “how to” draw pie charts on a basemap plot !

Here below I generalise the example given by Manuel Metz on the matplotlib website.

The idea is to draw a pie from scratch, in a method that allows a custom number of parts to be set. Each part of the pie is drawn as a scatter point with a custom marker (wedge). In the following example, the ratios list is provided to the **draw_pie** method. **X** and **Y** are the coordinates of the center of the pie, **size **is … the size of the pie chart.

The **draw_pie** method draws the pie part after part. The first part is drawn from **0.0** to **2*pi*ratios[0]**, the second between **2*pi*ratios[0]** to **2*pi*ratios[0]+2*pi*ratios[1]**, and so on until **2*pi** is reached. I don’t, for this example, verify that the sum of ratios is **1.0**. The colors of the parts are defined in the **colors **property (6 values here, can be expanded).

# # BaseMap example by geophysique.be # tutorial 05 """ Using : -- An example makes custom 'pie charts' as the markers for a scatter plot -- Thanks to Manuel Metz for the example """ import math import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap colors = ['red','blue','green','yellow','magenta','purple'] def draw_pie(ax,ratios=[0.4,0.3,0.3], X=0, Y=0, size = 1000): N = len(ratios) xy = [] start = 0. for ratio in ratios: x = [0] + np.cos(np.linspace(2*math.pi*start,2*math.pi*(start+ratio), 30)).tolist() y = [0] + np.sin(np.linspace(2*math.pi*start,2*math.pi*(start+ratio), 30)).tolist() xy1 = zip(x,y) xy.append(xy1) start += ratio for i, xyi in enumerate(xy): ax.scatter([X],[Y] , marker=(xyi,0), s=size, facecolor=colors[i] ) fig = plt.figure(figsize=(11.7,8.3)) #Custom adjust of the subplots plt.subplots_adjust(left=0.05,right=0.95,top=0.90,bottom=0.05,wspace=0.15,hspace=0.05) ax = plt.subplot(111) #Let's create a basemap around Belgium m = Basemap(resolution='i',projection='merc', llcrnrlat=49.0,urcrnrlat=52.0,llcrnrlon=1.,urcrnrlon=8.0,lat_ts=51.0) m.drawcountries(linewidth=0.5) m.drawcoastlines(linewidth=0.5) m.drawparallels(np.arange(49.,53.,1.),labels=[1,0,0,0],color='black',dashes=[1,0],labelstyle='+/-',linewidth=0.2) # draw parallels m.drawmeridians(np.arange(1.,9.,1.),labels=[0,0,0,1],color='black',dashes=[1,0],labelstyle='+/-',linewidth=0.2) # draw meridians X,Y = m(4.5,50.5) draw_pie(ax,[0.5,0.25,0.25], X, Y,size=300) X,Y = m(5.5,50.8) draw_pie(ax,[0.20,0.18,0.62], X,Y, size=250) plt.show()

## One thought on “Matplotlib Basemap tutorial 05 : Adding some pie charts !”