Pakete laden¶

In [1]:
import pandas as pd              # Für Datenmanipulation (DataFrames)
import numpy as np               # Für numerische Berechnungen, Zufallszahlen etc.

import matplotlib.pyplot as plt  # Für Diagramme (z. B. Linien-, Streu-, Balkendiagramme)
import seaborn as sns            # Erweiterung für matplotlib – stilvolle statistische Visualisierungen

from scipy.stats import pearsonr # Für Korrelationsberechnungen (z. B. Pearson-r)
In [2]:
np.random.seed(42)

data = pd.DataFrame({
    "value1": np.random.normal(loc=8, scale=5, size=50),
    "value2": np.random.normal(loc=10, scale=2, size=50)
})

print(data.head())
      value1     value2
0  10.483571  10.648168
1   7.308678   9.229835
2  11.238443   8.646156
3  15.615149  11.223353
4   6.829233  12.061999

Defintion¶

Im Streudiagramm werden bivariate Verteilungen metrischer Variablen veranschaulicht. Die Verteilung wird in Punkten abgebildet.

Beschreibung¶

Dadurch entsteht ein visueller Eindruck der Beziehung zwischen den Variablen. Die horizontale X-Achse repräsentiert meist dabei die unabhängige Variable, die vertikale Y-Achse die abhängige.

Ein Nachteil beim Streudiagramm ist, dass man nur einen Datenpunkt sieht, wenn viele Daten ausgewertet werden. Obwohl sich hinter ihm (ein oder mehrere) weitere Punkte verbergen können, ist nur ein Punkt ersichtlich. Abhilfe kann man schaffen, indem die jeweiligen Punkte etwas versetzt dargestellt werden (außerdem: unterschiedliche Farben, Formen, dichte vs. weniger dichte Punktschwärme, etc.)

Voraussetzung¶

✓ Die zu untersuchende Merkmale sollen metrisch sein.

Gestaltung¶

Da eine bivariate Streuung betrachtet wird, sollte man auch die richtige Achsenbezeichnung achten.

  • Farbe
  • Achsenbenennung
  • Überschriften

Code¶

Streudiagram - BASE¶

In [3]:
sns.set_theme()

# Berechne den Korrelationskoeffizienten (Pearson)
r, _ = pearsonr(data["value2"], data["value1"])

sns.scatterplot(x="value2", y="value1", data=data, color="darkgray", marker="^", s=60)
sns.regplot(x="value2", y="value1", data=data, scatter=False, color="orange", line_kws={"linewidth": 3})
plt.title(f"Streudiagramm (r = {r:.2f})")
plt.xlabel("Value2")
plt.ylabel("Value1")
plt.grid(True)
plt.show(
In [ ]:
# Setze das Seaborn-Theme (weißes Design mit schöner Typografie)
sns.set_theme()

# Erstelle Streudiagramm + Regressionslinie
sns.lmplot(
    x="value1",                # X-Achse: Variable value1
    y="value2",                # Y-Achse: Variable value2
    data=data,                 # Datensatz
    scatter_kws={              # Einstellungen für die Punkte
        "color": "blue",       # Punktfarbe
        "s": 20                # Punktgröße
    },
    line_kws={                 # Einstellungen für die Regressionslinie
        "color": "red",        # Linienfarbe
        "alpha": 0.7           # Transparenz der Linie
    }
)

# Achsentitel und Diagrammtitel setzen
plt.title("Streudiagramm")     # Diagrammtitel
plt.xlabel("Value1")           # X-Achsenbeschriftung
plt.ylabel("Value2")           # Y-Achsenbeschriftung

# Setze weißen Hintergrund mit grauem Gitter
sns.set_style("whitegrid", {
    "axes.facecolor": "lightgrey",   # Hintergrundfarbe des Plots
    "grid.color": "darkgrey"         # Gitterlinienfarbe
})

# Zeige das Diagramm
plt.show()
No description has been provided for this image

Streudiagramm-Matrix¶

In [ ]:
# Mehrere Variablen + Gruppierung
data1 = pd.DataFrame({
    "value1": np.random.normal(8, 5, 50),
    "value2": np.random.normal(10, 2, 50),
    "value3": np.random.normal(18, 5, 50),
    "value4": np.random.normal(19, 2, 50),
    "sex": ["A"] * 25 + ["B"] * 25
})

print(data1.head())
     value1     value2     value3     value4 sex
0  0.923146  10.500986  19.788937  16.478232   A
1  5.896773  10.692896  20.803923  20.835724   A
2  6.286427   8.639951  23.415256  23.244312   A
3  3.988614  10.464507  23.269010  21.064931   A
4  7.193571  10.586145  11.111653  15.961260   A

Streudiagramm-Matrix ohne sex¶

In [ ]:
sns.pairplot(data1[["value1", "value2", "value3", "value4"]], diag_kind="kde")
plt.show()
No description has been provided for this image

Streudiagramm-Matrix mit sex¶

In [ ]:
# Scatterplot-Matrix gruppiert nach 'sex'
sns.pairplot(data1, vars=["value1", "value2", "value3", "value4"], hue="sex", diag_kind="kde")
plt.show()
No description has been provided for this image
In [ ]:
# Setze das Theme auf "white" für saubere Darstellung
sns.set_theme(style="white", color_codes=True)

# Erstelle das Jointplot: Streudiagramm + Histogramme
g = sns.jointplot(
    x="value1", y="value2",  # Deine Datenachsen
    data=data,               # Datensatz aus dem Streudiagramm-Notebook
    kind="scatter",          # 'scatter' oder 'kde'
    color="skyblue",         # Farbe der Punkte
    s=100,                   # Punktgröße
    edgecolor="blue"         # Randfarbe der Punkte
)

g.plot_joint(sns.scatterplot, color="skyblue", edgecolor="blue")  # Style-Anpassung
plt.show()
No description has been provided for this image