Messdaten (100.000+) auswerten, Diagramme erzeugen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Also ich bekomme immer einen der beiden Error, egal ob ich Komma oder Punkt mache.
Hab eben mal alle anderen TI-Zeilen gelöscht, und die TI101 mit Punkt und Komma ausprobiert, error war immer "TypeError: Empty 'DataFrame': no numeric data to plot".
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Hat vielleicht noch einer eine Lösung oder ein Beispiel mit einer einfachen Datei, wo es funktioniert?

Danke

edit: Frage nach einem Beispiel besteht jetzt nicht mehr unbedingt, da ThomasL (Danke dafür) das schon macht. Wenn jemand trotzdem einen Einfall hat wäre das natürlich immer noch interessant. Danke an alle!
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Mogician hat geschrieben: Sonntag 4. November 2018, 19:32 Natürlich gerne. Soll ich das irgendwo hochladen und dir den Link schicken oder geht das auch irgendwo hier, oder direkt?
Falls möglich, stell den Link zur Originaldatei doch gerne hier rein, da ist die Schwelle dir zu helfen für alle niedriger.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Mogician, du hast das Notebook in deinem Postfach

Code: Alles auswählen

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_table('Daten_02112018114518.txt', skiprows=[0,1,2,3,4,5,6,7,8,9,10,11,13], index_col=False)
df.info()

df.head(2)

# zusammenfügen der Spalten DATE und TIME zu einer vom Typ DATETIME
newdate = df['Date'] + ' ' + df['Time']
newdate = pd.to_datetime(newdate, errors='raise')
newdate = pd.DataFrame(newdate, columns=['date_time'])
df = pd.concat([newdate, df], axis=1)

# die DATETIME Spalte als Index definieren
df.set_index('date_time', inplace=True)
df.head(2)

df['TI101'].plot(kind='line', figsize=(10,5), color=['black'], ylim=[40, 140], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.show()

TI101_102 = df[['TI101', 'TI102']]
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Difference'])
TI101_102 = pd.concat([TI101_102, diff], axis=1)
TI101_102.plot(kind='line', color=['blue', 'green', 'red'], figsize=(18,5), rot=90, xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101 und TI102, sowie Differenz der beiden')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.legend(labels=TI101_102.columns, loc='best')
plt.show()

fig = plt.figure() # create figure

ax0 = fig.add_subplot(1, 2, 1) # add subplot 1 (1 row, 2 columns, first plot)
ax1 = fig.add_subplot(1, 2, 2) # add subplot 2 (1 row, 2 columns, second plot). See tip below**

# Subplot 1: 
df[['TI101', 'TI102']].plot(kind='line', figsize=(18,5), ax=ax0, color=['blue', 'green'], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])  # add to subplot 1
ax0.set_title('T1101 und TI102')
ax0.set_ylabel('Messwerte')
ax0.set_xlabel('Zeitpunkte')

# Subplot 2:
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Differenz'])
diff.plot(kind='line', figsize=(18, 5), ax=ax1, ylim=[-5,17], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])  # add to subplot 2
ax1.set_title ('Differenz')
ax1.set_ylabel('Messwerte')
ax1.set_xlabel('Zeitpunkte')
ax1.annotate('Was ist das für eine Spitze?', xy=('2018-02-11 12:01:00', -3))

plt.show()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Super, der code hilft mir schon massiv weiter. Eine Frage hätte ich jetzt noch.
Wie greife ich einen bestimmten Wertebereich raus auf der x-Achse, also zb wenn die Messung von 12h bis 15h lief, und man nur von 13h-14h plotten möchte?
Für die y-Achse hab ich das geschafft, aber wegen dem Zeitformat noch nicht auf der x-Achse.

Also ich habe probiert den code von ThomasL anzuwenden

Code: Alles auswählen

xlim=(['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
und auch

Code: Alles auswählen

plt.axis([0, 50, 12, 20])
und den letzten dann auch mit diversen xmin und xmax Werten aber im Ergebnis kriege ich immer was ganz anderes auf der x-Achse

Danke
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Also ich habe jetzt doch die Zeitachse so hinbekommen wie ich wollte, dafür sind aber die Messwerte weg.

Code: Alles auswählen

plt.figure()

df['TI111'].plot()
df['TI112'].plot()
df['TI113'].plot()
df['TI114'].plot()
df['TI115'].plot()
df['TI116'].plot()
plt.xlim(58800,62000)
plt.legend()
plt.xlabel('Time')
plt.ylabel('Temperature [°C]')
Bild Bild


edit: Geht jetzt doch, Datum und Uhrzeiten waren bei mir nur etwas anders.

Code: Alles auswählen

plt.xlim(['2018-11-07 16:10:00', '2018-11-07 17:10:00'])
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Freut mich, dass ich dir helfen konnte.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Habt ihr vielleicht noch eine Idee, wie ich den Kurven immer einen Namen direkt zuweisen kann? Also nicht über die Legende? Das wird sonst schnell unübersichtlich.

Danke
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten