Mathematik für Ingenieure mit Python

Mathematische Grundlagen
www.grund-wissen.de/mathematik
WinPython
Alles was man für Mathematik mit Python unter Windows braucht.
winpython.sourceforge.net
Download WinPython
Python-Code
vollständiger Python-Code: under-five-mortality.py

SVG Grafik:
infant-under-five-mortality-worldmap.svg

Weltkarte zur Kindersterblichkeit

Weltkarte zur Kindersterblichkeit
Diese Karte wurde von mir für Wikipedia hergestellt.
Verwendung auf Wikipedia: Kindersterblichkeit Weltweit
"""
Number of deaths of infants under five years per 1,000 live births for 2016. 
Data from https://data.worldbank.org/indicator/SH.DYN.MORT?end=2016&start=2016&view=map
Country shapes from http://www.naturalearthdata.com/downloads/110m-cultural-vectors
Created with Python and Matplotlib Basemap Toolkit.
"""

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
from matplotlib.colors import LinearSegmentedColormap

#########################################################################################
# read mortality data
data = open("API_SH.DYN.MORT_DS2_en_csv_v2/API_SH.DYN.MORT_DS2_en_csv_v2.csv").readlines()
mortality={}
for line in data[5:]:
    line = line.replace('",','|').replace(",","").replace('"',"").strip().split("|")
    if len(line)<10:
        continue
    try:
        value=float(line[-2])
    except:
        continue
    key = line[1]
    mortality[key]=value

#########################################################################################
# draw empty worldmap
fig = plt.figure(figsize=(18,8.6))
plt.subplots_adjust(left=0.01, bottom=0.01, right=1.12, top=0.99)

m = Basemap(projection='robin',lon_0=0, llcrnrlat=-60,urcrnrlat=85, llcrnrlon=-180, urcrnrlon=180, resolution='l')
m.drawmapboundary()


#########################################################################################
# color country shapes
m.readshapefile('ne_110m_admin_0_countries/ne_110m_admin_0_countries', name='world', drawbounds=True, color='gray')

countries = []
undefined_countries = []
mortList  = []
for info, shape in zip(m.world_info, m.world):
    try:
        mort = mortality[info["ADM0_A3"]]
    except:
        undefined_countries.append(Polygon(np.array(shape), True))
        continue

    countries.append(Polygon(np.array(shape), True))
    mortList.append(mort)
    
mortArray = np.array(mortList)
print mortArray.min(), mortArray.max()
ticks = np.linspace(0, 130,14)

#########################################################################################
# colorbar
cm = LinearSegmentedColormap.from_list("cm", ["#81fcff", "#19ff19", "#e2f000", "#ffaa31", "#ff8e51", "#ff6969", "#8c0000", "#3c0000"])
p = PatchCollection(countries, alpha=0.5,  zorder=3, cmap=cm)
p.set_array(mortArray)
p.set_clim([ticks.min(), ticks.max()])

plt.gca().add_collection(p)
cb = fig.colorbar(p, ticks = ticks, shrink=0.6, pad = 0.02)

#########################################################################################
# set countries without data to lightgray
p2 = PatchCollection(undefined_countries, alpha=0.5,  zorder=3, cmap=LinearSegmentedColormap.from_list("lg", ["lightgray", "lightgray"]))
p2.set_array(np.ones((len(undefined_countries),)))
plt.gca().add_collection(p2)

#########################################################################################
# save and show
filename = "infant-under-five-mortality-worldmap-2016"
plt.savefig(filename + ".svg")
plt.savefig(filename + "-1800px.png", dpi=100)
plt.savefig(filename + "-900px.png",  dpi=50)

plt.show()