Blog der Heimetli Software AG

Einfache Choroplethenkarte

Wie diese Karte zustande kam wird hier erklärt: einfache Karte mit geopandas.

Wenn Ihr Geopandas-Frame saubere Daten hat, dann ist eine Choroplethen-Karte auch sehr einfach:

import geopandas
import matplotlib.pyplot as plt
from shapely.geometry import Point

# Read the shapefile and related data
gdf = geopandas.read_file( "swissBOUNDARIES3D_1_3_TLM_KANTONSGEBIET.shp" )

# Necessary because some areas do not have EINWOHNERZ or KANTONSFLA
temp = gdf[["KANTONSNUM","EINWOHNERZ","KANTONSFLA"]].copy()
temp["density"] = temp["EINWOHNERZ"] / temp["KANTONSFLA"]
temp.dropna( inplace=True )
temp.drop( ["EINWOHNERZ","KANTONSFLA"], axis=1, inplace=True )

gdf = gdf.join( temp.set_index("KANTONSNUM"), on="KANTONSNUM" )

# Plot the map
ax = gdf.plot( column="density" )

# Definitions for the cities
cities = geopandas.GeoDataFrame(
        { "name": ["Regensdorf", "Bern", "Basel", "Brig", "Zürich"],
          "position": [Point(2677911.365,1254622.585),Point(2599859.275,1199633.166),
                       Point(2611328.186,1267660.365),Point(2642300.939,1129536.286),
                       Point(2682771.071,1247998.554)],
          "tx": [2677849,2599858,2617802,2640000,2685000],
          "ty": [1259315,1190000,1257500,1120000,1236000]
        }, geometry="position" ) ;

# Plot the points
cities.plot( ax=ax, color="red", markersize=5 )

# Name the points
cities.apply( lambda r: ax.annotate(r[0],xy=(r[2],r[3]),color="white",horizontalalignment="center"), axis=1 )

# Remove axes and margins
ax.margins( 0 )
plt.axis( "off" )

# Save plot as SVG
plt.savefig( "gpchoro.svg", bbox_inches="tight", pad_inches=0.1 )

Die Daten von Swisstopo sind nicht vollständig, für einige Gebiete gibt es keine Angaben zu EINWOHNERZ und KANTONSFLA. Weil alle Gebiete die zu einem Kanton gehören mit der gleichen KANTONSNUM ausgezeichnet sind, kann man das mit etwas Data-Wrangling ergänzen.

Choroplethenkarte der Schweiz

Die Verteilung der Bevölkerungsdichte ist sehr unterschiedlich, mit Basel als Ausreisser. Das führt dazu dass die meisten Kantone einen sehr ähnlichen Farbton haben.

Aber keine Angst, Geopandas bietet auch dafür eine Lösung: finale Cororplethenkarte mit Geopandas