# -*- coding: utf-8 -*-
"""
Created on Fri Oct  3 12:33:44 2025

@author: Moritz Romeike
"""

# ------------------------------------------------------------------------
# Programmcode 12 (Python, nur matplotlib): Violinplot für Dioden 01–08
# ------------------------------------------------------------------------
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Für Reproduzierbarkeit
np.random.seed(123)

# Simulierte Produktionswerte für jede Diode
produktion = np.concatenate([
    np.random.normal(loc=50000, scale=2000, size=50),  # Diode 01
    np.random.normal(loc=42000, scale=1800, size=50),  # Diode 02
    np.random.normal(loc=39000, scale=1700, size=50),  # Diode 03
    np.random.normal(loc=37000, scale=1600, size=50),  # Diode 04
    np.random.normal(loc=35000, scale=1500, size=50),  # Diode 05
    np.random.normal(loc=31000, scale=1400, size=50),  # Diode 06
    np.random.normal(loc=29000, scale=1300, size=50),  # Diode 07
    np.random.normal(loc=25000, scale=1200, size=50)   # Diode 08
])

diodentyp = np.repeat(
    ["Diode 01","Diode 02","Diode 03","Diode 04",
     "Diode 05","Diode 06","Diode 07","Diode 08"], 50
)

# DataFrame (optional für Übersicht)
df = pd.DataFrame({"DiodenTyp": diodentyp, "Produktion": produktion})

# Violinplot mit matplotlib
plt.figure(figsize=(10,6))
parts = plt.violinplot(
    [df.loc[df["DiodenTyp"]==d, "Produktion"] for d in df["DiodenTyp"].unique()],
    showmeans=False, showmedians=False, showextrema=False
)

# Farbe setzen
for pc in parts['bodies']:
    pc.set_facecolor("lightblue")
    pc.set_alpha(0.7)
    pc.set_edgecolor("black")

# Median, IQR und Whisker manuell hinzufügen
for i, d in enumerate(df["DiodenTyp"].unique(), start=1):
    vals = df.loc[df["DiodenTyp"]==d, "Produktion"].values
    q1, q3 = np.percentile(vals, [25, 75])
    median = np.median(vals)
    iqr = q3 - q1
    lower = q1 - 1.5 * iqr
    upper = q3 + 1.5 * iqr

    # Median als roten Punkt
    plt.scatter(i, median, color="red", s=40, zorder=3)
    # IQR (schwarze Linie)
    plt.vlines(i, q1, q3, color="black", linewidth=2)
    # Whisker (blaue Linien)
    plt.vlines(i, lower, upper, color="blue", linewidth=1)

plt.title("Verteilung der produzierten Power-Dioden mit IQR und Median")
plt.xlabel("Dioden-Typ")
plt.ylabel("Produktion")
plt.xticks(range(1, 9), df["DiodenTyp"].unique(), rotation=45)
plt.tight_layout()
plt.show()
# ------------------------------------------------------------------------
