Pakete laden¶
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)
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¶
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(
# 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()
Streudiagramm-Matrix¶
# 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¶
sns.pairplot(data1[["value1", "value2", "value3", "value4"]], diag_kind="kde")
plt.show()
Streudiagramm-Matrix mit sex¶
# Scatterplot-Matrix gruppiert nach 'sex'
sns.pairplot(data1, vars=["value1", "value2", "value3", "value4"], hue="sex", diag_kind="kde")
plt.show()
# 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()