Weltkarte mit Matplotlib Basemap Toolkit

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
MagBen
User
Beiträge: 710
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Weltkarte mit Matplotlib Basemap Toolkit

Beitragvon MagBen » Dienstag 31. Oktober 2017, 13:48

Weltkarte zur Kindersterblichkeit (Tode pro 1000 Geburten)

Bild

Verwendung: https://de.wikipedia.org/wiki/Kindersterblichkeit#Kindersterblichkeit_weltweit

Daten: https://data.worldbank.org/indicator/SH.DYN.MORT?end=2016&start=2016&view=map
Country shapes: http://www.naturalearthdata.com/downloads/110m-cultural-vectors/

  1. """
  2. Number of deaths of infants under five years per 1,000 live births for 2016.
  3. Created with Python and Matplotlib Basemap Toolkit.
  4. """
  5.  
  6. from mpl_toolkits.basemap import Basemap
  7. import matplotlib.pyplot as plt
  8. import numpy as np
  9.  
  10. from matplotlib.patches import Polygon
  11. from matplotlib.collections import PatchCollection
  12. from matplotlib.patches import PathPatch
  13. from matplotlib.colors import LinearSegmentedColormap
  14.  
  15. #########################################################################################
  16. # read mortality data
  17. data = open("API_SH.DYN.MORT_DS2_en_csv_v2/API_SH.DYN.MORT_DS2_en_csv_v2.csv").readlines()
  18. mortality={}
  19. for line in data[5:]:
  20.     line = line.replace('",','|').replace(",","").replace('"',"").strip().split("|")
  21.     if len(line)<10:
  22.         continue
  23.     try:
  24.         value=float(line[-2])
  25.     except:
  26.         continue
  27.     key = line[1]
  28.     mortality[key]=value
  29.  
  30. #########################################################################################
  31. # draw empty worldmap
  32. fig = plt.figure(figsize=(18,8.6))
  33. plt.subplots_adjust(left=0.01, bottom=0.01, right=1.12, top=0.99)
  34.  
  35. m = Basemap(projection='robin',lon_0=0, llcrnrlat=-60,urcrnrlat=85, llcrnrlon=-180, urcrnrlon=180, resolution='l')
  36. m.drawmapboundary()
  37.  
  38.  
  39. #########################################################################################
  40. # color country shapes
  41. m.readshapefile('ne_110m_admin_0_countries/ne_110m_admin_0_countries', name='world', drawbounds=True, color='gray')
  42.  
  43. countries = []
  44. undefined_countries = []
  45. mortList  = []
  46. for info, shape in zip(m.world_info, m.world):
  47.     try:
  48.         mort = mortality[info["ADM0_A3"]]
  49.     except:
  50.         undefined_countries.append(Polygon(np.array(shape), True))
  51.         continue
  52.  
  53.     countries.append(Polygon(np.array(shape), True))
  54.     mortList.append(mort)
  55.    
  56. mortArray = np.array(mortList)
  57. print mortArray.min(), mortArray.max()
  58. ticks = np.linspace(0, 130,14)
  59.  
  60. #########################################################################################
  61. # colorbar
  62. cm = LinearSegmentedColormap.from_list("cm", ["#81fcff", "#19ff19", "#e2f000", "#ffaa31", "#ff8e51", "#ff6969", "#8c0000", "#3c0000"])
  63. p = PatchCollection(countries, alpha=0.5,  zorder=3, cmap=cm)
  64. p.set_array(mortArray)
  65. p.set_clim([ticks.min(), ticks.max()])
  66.  
  67. plt.gca().add_collection(p)
  68. cb = fig.colorbar(p, ticks = ticks, shrink=0.6, pad = 0.02)
  69.  
  70. #########################################################################################
  71. # set countries without data to lightgray
  72. p2 = PatchCollection(undefined_countries, alpha=0.5,  zorder=3, cmap=LinearSegmentedColormap.from_list("lg", ["lightgray", "lightgray"]))
  73. p2.set_array(np.ones((len(undefined_countries),)))
  74. plt.gca().add_collection(p2)
  75.  
  76. #########################################################################################
  77. # save and show
  78. filename = "infant-under-five-mortality-worldmap-2016"
  79. plt.savefig(filename + ".svg")
  80. plt.savefig(filename + "-1800px.png", dpi=100)
  81. plt.savefig(filename + "-900px.png",  dpi=50)
  82.  
  83. plt.show()
a fool with a tool is still a fool, www.magben.de, YouTube

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder