Blog der Heimetli Software AG

Ausgearbeitete Choroplethenkarte mit Geopandas

Zusammen mit mapclassify bietet Geopandas eine Auswahl von Methoden an um auch extreme Verteilungen der dargestellten Daten zu behandeln.

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", scheme="natural_breaks", legend=True, legend_kwds={"loc":"upper left","bbox_to_anchor":(0.85,1.)} )

# 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( "gpfinal.svg", bbox_inches="tight", pad_inches=0.1 )

Der Parameter scheme der plot-Methode bestimmt wie die Farben auf die Daten gemappt werden. Beachten Sie die ungleichmässigen Intervalle in der Legende.

Die Legende ist in dieser Version ebenfalls hinzugekommen, und so platziert dass sie nicht mit der Karte überlappt.

Bevölkerungsdichte pro Kanton

Bevölkerungsdichte der Kantone