From c47a3d76c59cdfee2b8edeba81e063ff9c28beaf Mon Sep 17 00:00:00 2001 From: Maximilian Eibl Date: Mon, 6 Jan 2025 16:07:18 +0100 Subject: [PATCH] modifizierung --- Durschlag_Daten.csv | 2 ++ durchschl-papier-graph.py | 49 +++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 28 deletions(-) create mode 100644 Durschlag_Daten.csv diff --git a/Durschlag_Daten.csv b/Durschlag_Daten.csv new file mode 100644 index 0000000..6e10aea --- /dev/null +++ b/Durschlag_Daten.csv @@ -0,0 +1,2 @@ +2;3;4;5;mm +11;15.Jän;16.Jun;21.Jun;kV diff --git a/durchschl-papier-graph.py b/durchschl-papier-graph.py index 6d9d93d..e42a0f5 100644 --- a/durchschl-papier-graph.py +++ b/durchschl-papier-graph.py @@ -3,29 +3,20 @@ import numpy as np from matplotlib.colors import LinearSegmentedColormap def analyze_paper_breakdown(lengths, voltages, ed_standard_values): - """ - Analysiert die Durchschlageigenschaften von Papier. - Zeigt Spannung und Feldstärke mit passenden Farben. - Farbliche Darstellung der Fläche zwischen Realwert und 5 kV/mm mit glatterem Verlauf. - Hervorhebung des ED-Real-Verlaufs im unteren Graphen. - """ - lengths = np.array(lengths) voltages = np.array(voltages) ed_real = voltages / lengths fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True) - # Farben fĂĽr die Standardwerte definieren 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))) - # Farbpalette fĂĽr den Verlauf erstellen (GrĂĽn zu Dunkelrot) - cmap = LinearSegmentedColormap.from_list("mycmap", ["green", "darkred"], N=500) #5x mehr Stufen + # Feste rote Farbe + red_color = 'red' - # Spannung plotten ax1.plot(lengths, voltages, label="U (gemessen)", marker='o', linestyle='-', color='blue') for i, ed_standard in enumerate(ed_standard_values): @@ -34,34 +25,36 @@ def analyze_paper_breakdown(lengths, voltages, ed_standard_values): if ed_standard == 5: deviation = u_erwartung - voltages - # Farbliche Darstellung der Fläche zwischen Realwert und 5 kV/mm mit glatterem Verlauf - for k in range(len(lengths)): - if ed_real[k] > 5: - rel_dist = (ed_real[k] - 5) - else: - rel_dist = (5 - ed_real[k]) - - color_index = min(499, int(rel_dist * 250)) #Angepasst an die erhöhte Stufenzahl - - if 4 <= ed_real[k] <= 6: + 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(lengths[k:k+2], voltages[k:k+2], u_erwartung[k:k+2], color=cmap(color_index), alpha=0.5, zorder=5) + 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(lengths[k:k+2], u_erwartung[k:k+2], voltages[k:k+2], color=cmap(color_index), alpha=0.5, zorder=5) + 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 [kV]") ax1.set_title("Durchschlageigenschaften in Abhängigkeit von Materialstärke") - # Legende anpassen (Duplikate entfernen) 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) - # Durchschlagsfeldstärke plotten MIT Hervorhebung - ax2.plot(lengths, ed_real, label="ED (gemessen)", marker='s', color='blue', linestyle='-', linewidth=3, zorder=10) #Dickere Linie, oberste Ebene - + 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]) @@ -71,6 +64,7 @@ def analyze_paper_breakdown(lengths, voltages, ed_standard_values): ax2.grid(True) fig.tight_layout() + plt.show() return fig # Beispieldaten @@ -80,7 +74,6 @@ ed_standard_values = [4, 5, 6] # Analyse und Anzeige fig = analyze_paper_breakdown(papier_lengths, papier_voltages, ed_standard_values) -plt.show() papier_ed_real = np.array(papier_voltages) / np.array(papier_lengths) print(f"Gemessene Durchschlagsfeldstärken (ED-Real): {papier_ed_real} kV/mm") \ No newline at end of file