Skalierung mehreren Signale

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Bibi93
User
Beiträge: 4
Registriert: Donnerstag 20. Januar 2022, 11:22

Hallo liebe Community,
Ich habe mehrere Signale aus Messwerte( TXT Datei) erzeugt. Mit einer For schleife habe ich alle Signale bekommen. Auf x Achse läuft die Zeit (35s) für alle signale gliech. Die Amplitude allerdings ist anders vom Signal zu dem anderen. Damit ich eine aussagekräftige Interpretierung der Signale muss ich die Skalierung auf der Achse Y einheitlich machen. Ich würde mich sehr freuen, wenn ihr eine Idee habt und mir helfen könnt.
Liebe Grüße

Mein Code ist der folgende ´:
fig, axes = plt.subplots(nrows=len(gut), ncols=1, figsize = (15, 250))
fig.tight_layout()
# Schleife durchlaufen
for i in range(len(gut)):
# file öffnen
myfilegut = open(gut) #file gut öffnen und durchlaufen
header = myfilegut.readline() #erste Zeile als Header speichern
data = myfilegut.readlines() # alle nachfolgende zeilen einlesen und in data speichern
myfilegut.close() #file gut schließen
x = []
y = []
z = []
# für jede Zeile des Files
for line in data:
# Zeilen in eine Tabelle Basis teilen
d= line.split('\t')
# Elemente x,y,z adieren dann Kommas durch Punkte ersetzen und data im string zum float konvertieren
x.append(float(d[0].replace(',','.')))
y.append(float(d[1].replace(',','.')))
z.append(float(d[2].replace(',','.')))
# zum Array konvertieren
x1 = np.array(x)
y1 = np.array(y)
z1 = np.array(z)
title = gut.split('\\')[-1]
# Beschleunigungsaufnehmer plot bettiteln
axes.set_title(f"{title} - BA (m/(s*s))")
# plotten
axes.plot(x1,z1)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Willst Du einen Plot mit mehreren Achsen haben (https://stackoverflow.com/questions/773 ... different-
scales)?

Statt über einen Index iteriert man in Python direkt über die Elemente, hier mit `zip`, weil Du zwei Listen hast.
Dateien öffnet man mit with. Das my- ist bei Variablennamen meist unsinnig, weil nichtssagend.
Einfacher geht das Lesen mit numpy.

Code: Alles auswählen

def convert_float(text):
    return float(text.replace(',', '.'))

fig, axes = plt.subplots(nrows=len(gut), ncols=1, figsize = (15, 250))
fig.tight_layout()

for filename, axis in zip(gut, axes):
    usecols = [0, 1, 2]
    x, y, z = numpy.loadtxt(filename,
        skiprow=1,
        usecols=usecols,
        converters=dict.fromkeys(usecols, convert_float),
        unpack=True)
    title = os.path.basename(filename)
    # Beschleunigungsaufnehmer plot betiteln
    axis.set_title(f"{title} - BA (m/(s*s))")  
    axis.plot(x, z)
Bibi93
User
Beiträge: 4
Registriert: Donnerstag 20. Januar 2022, 11:22

vielen Dank für Deine Antwort,

ich habe mehrere Subplots, die nicht die gleiche Skalierung haben. Dabei ist die Amplitude beispielhaft in einem subplot bis zu 60 während bei dem anderen Subplot liegt die Amplitude nur bei 20. Wie kann ich alle Subplots auf einer Skala von 40 (Bei allen signalen) erzeugen?
Danke im Voraus und beste Grüße
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Also willst Du normieren.

Code: Alles auswählen

z /= z.max()
Bibi93
User
Beiträge: 4
Registriert: Donnerstag 20. Januar 2022, 11:22

Danke für deinen Versuch. Ich habe es gefunden:
axes.set_ylim sollte ich hinzufügen.
Antworten