import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LinearSegmentedColormap def analyze_paper_breakdown(lengths, voltages, ed_standard_values): lengths = np.array(lengths) voltages = np.array(voltages) ed_real = voltages / lengths fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True) colors = ['red', 'green', 'purple', 'orange', 'brown', 'cyan', 'magenta', 'olive'] if len(ed_standard_values) > len(colors): import itertools colors = list(itertools.islice(itertools.cycle(colors), len(ed_standard_values))) # Feste rote Farbe red_color = 'red' ax1.plot(lengths, voltages, label="U (gemessen)", marker='o', linestyle='-', color='blue') for i, ed_standard in enumerate(ed_standard_values): u_erwartung = lengths * ed_standard ax1.plot(lengths, u_erwartung, label=f"U (Erwartung, {ed_standard} kV/mm)", marker='x', linestyle='--', color=colors[i]) if ed_standard == 5: deviation = u_erwartung - voltages mask = (ed_real >= 4) & (ed_real <= 6) for k in np.where(mask)[0]: x_vals = lengths[k:k+2] if len(x_vals) == 2: if deviation[k] > 0: ax1.fill_between(x_vals, voltages[k:k+2], u_erwartung[k:k+2], color=red_color, alpha=0.5, zorder=5) elif deviation[k] < 0: ax1.fill_between(x_vals, u_erwartung[k:k+2], voltages[k:k+2], color=red_color, alpha=0.5, zorder=5) #Füllen im unteren Graphen ed_5 = np.full_like(lengths, 5) # Erzeugt ein Array mit dem Wert 5 for k in np.where(mask)[0]: x_vals = lengths[k:k+2] if len(x_vals) == 2: if ed_real[k] > 5: ax2.fill_between(x_vals, ed_5[k:k+2], ed_real[k:k+2], color=red_color, alpha=0.5, zorder=5) elif ed_real[k] < 5: ax2.fill_between(x_vals, ed_real[k:k+2],ed_5[k:k+2], color=red_color, alpha=0.5, zorder=5) ax1.set_ylabel("Spannung U [kV]") #ax1.set_title("Durchschlageigenschaften in Abhängigkeit von Materialstärke") handles1, labels1 = ax1.get_legend_handles_labels() by_label = dict(zip(labels1, handles1)) ax1.legend(by_label.values(), by_label.keys(), loc='upper left') ax1.grid(True) ax2.plot(lengths, ed_real, label="ED (gemessen)", marker='s', color='blue', linestyle='-') for i, ed_standard in enumerate(ed_standard_values): ax2.plot(lengths, np.full_like(lengths, ed_standard), label=f"ED (Erwartung, {ed_standard} kV/mm)", linestyle='--', color=colors[i]) ax2.set_xlabel("Materialstärke l [mm]") ax2.set_ylabel("Durchschlagsfeldstärke E [kV/mm]") ax2.legend(loc='lower left') ax2.grid(True) fig.tight_layout() plt.show() return fig # Beispieldaten papier_lengths = [2, 3, 4, 5] papier_voltages = [11, 15.1, 16.6, 21.6] ed_standard_values = [4, 5, 6] # Analyse und Anzeige fig = analyze_paper_breakdown(papier_lengths, papier_voltages, ed_standard_values) papier_ed_real = np.array(papier_voltages) / np.array(papier_lengths) print(f"Gemessene Durchschlagsfeldstärken (ED-Real): {papier_ed_real} kV/mm")