Animierter Scatterplot

In dieser Übung werden wir den Zusammenhang von Lebenserwartung und Fruchtbarkeit untersuchen. Dazu werden wir die berühmte Animation von Hans Rosling nachstellen (siehe Hans Rosling - Global population growth, box by box.

Warnung

Diese Übung verwendet die ältere Bibliothek pandas. Diese wird allmählich von polars abgelöst.

Der Code hier ist noch nicht umgestellt.

Schritt 1

Lade die Datei demographie.csv in pandas.

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

df = pd.read_csv('demographie.csv')

Inspiziere die Daten.

Schritt 2

Erstelle einen Scatterplot, z.B.:

sns.scatterplot(data=df, x="fruchtbarkeit", y="lebenserwartung",
                hue="land", legend=False)

Schritt 3

Wähle einen Teildatensatz aus, z.B.:

deutschland = df[df["land"] == "Germany"]

Plotte die Daten erneut.

Schritt 4

Möchtest du die Größe der Kreise nach der Bevölkerung einstellen, sind folgende Schritte nötig:

df = df.dropna()   # leere Zeilen raus
x = ...            # Skalierungsfaktor
sns.scatterplot(s=df["bevoelkerung"] * x)

Finde einen sinnvollen Wert für x.

Schritt 5

Du kannst die Darstellung auch etwas präzisieren. Füge folgende Anweisungen zum Plot-Befehl hinzu:

plt.figure(figsize=(7, 5))
sns.scatterplot(...)
plt.xlim(0, 8)
plt.ylim(30, 80)
plt.title("mein plot")
plt.savefig("plot.png", dpi=100)

Schritt 6

Erstelle nun eine Serie von Scatterplots, einen für jeden Jahrgang ab 1960.

Schritt 7

Installiere das Python-Modul imageio, indem Du auf der Kommandozeile eingibst:

pip install imageio

Passe das folgende Skript an und führe es aus:

import imageio

images = []

for i in range(0, 100):
    filename = f'plot_{i:03d}.png'
    images.append(imageio.imread(filename))

imageio.mimsave('output.gif', images, fps=20)