Temperatur Animation mit pandas

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.
Antworten
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hi vieleicht kann mir jemand helfen, ich möchte eine Animation machen und zwaqr habe ich 5 Temperatursensoren (FBGS_newi) die in 5 unterschiedlichen Tiefen liegen (T_fiber_depth_new) und die Temperaturen wurden alles 10 min z. B. aufgezeichnet (data_FBGS.index [nur als Beispiel]). Das Zeit und Messwert wurden als panda Dataframe zusammengeführt mit diesen habe ich bis jetzt immer gearbeitet. Jetzt würde ich mir gernen die x Achse in einer bestimmten Breite festlegen 500 pixel oder so was und die Tiefe (T_fiber_depth_new) an der y Achse und dann vieleicht mit imshow? eine animation mit den Temperatur daten darstellen lassen. Ich hab das noch nie gemacht und weiß erstmal nichts habe mir schon http://matplotlib.org/examples/animation/index.html ein wenig angeschaut bin aber immer noch nicht schlauer. Kann mir jemand helfen?

FBGS_newi
  • 2.008116837847029146e+01 1.569448195585872696e+01 1.285351885566523578e+01 1.302757080629859665e+01 1.245295368251190915e+01
    2.000742196245450089e+01 1.569416321036050022e+01 1.285207480512741363e+01 1.302747206983848827e+01 1.245369833796030790e+01
    1.993328523251420847e+01 1.569383430483075159e+01 1.285062756630558489e+01 1.302737223765896601e+01 1.245444349746489543e+01
    1.985878543541046781e+01 1.569349509354259276e+01 1.284917764016969421e+01 1.302727133172048291e+01 1.245518887344978864e+01
    1.978395013888331988e+01 1.569314543156045261e+01 1.284772552948126467e+01 1.302716937461777391e+01 1.245593417794180446e+01
    1.970880721104735755e+01 1.569278517479858692e+01 1.284627173841931835e+01 1.302706638957370444e+01 1.245667912280313772e+01
    1.963338479939547199e+01 1.569241418007996636e+01 1.284481677220517604e+01 1.302696240043323783e+01 1.245742341996483482e+01
    1.955771130943011826e+01 1.569203230519563519e+01 1.284336113672653923e+01 1.302685743165738153e+01 1.245816678166078795e+01
    1.948181538294257464e+01 1.569163940896449283e+01 1.284190533816137503e+01 1.302675150831730377e+01 1.245890892066202582e+01
    1.940572587596077270e+01 1.569123535129350699e+01 1.284044988260185960e+01 1.302664465608857824e+01 1.245964955051098322e+01
    1.932947183638711053e+01 1.569081999323843313e+01 1.283899527567894516e+01 1.302653690124557961e+01 1.246038838575561769e+01
    1.925308248134803080e+01 1.569039319706487490e+01 1.283754202218785601e+01 1.302642827065605147e+01 1.246112514218295964e+01
und

Code: Alles auswählen

T_fiber_depth_new
Out[9]: 
array([ 0,  1,  2,  3,  4])
und

Code: Alles auswählen

data_FBGS.index
Out[7]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-09-09 15:50:00, ..., 2014-11-17 23:30:00]
Length: 9983, Freq: 10T, Timezone: None

Code: Alles auswählen

FBGS_new = DataFrame(FBGS_newi, index=data_FBGS.index)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Was ist der Grund für die Animation, sind es zuviele Daten für einen Plot, möchtest Du was bewegtes präsentieren um die Dynamik des Systems zu veranschaulichen?
Hast Du die Daten bereits nicht-animiert geplottet?
a fool with a tool is still a fool, www.magben.de, YouTube
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Danke für deine Antwort. Ja genau ich möchtest was bewegtes präsentieren um die Dynamik des Systems zu veranschaulichen. Sind Temperaturen in einer Bohrung die sich durch Fluide verändern. Ja habe ich schon geplottet mit imshow eine Zeitreihe. X-Achse die Zeit Y-Achse die Tiefe. Aber eien animation über die ganze Tiefe um in verschiedenen Bereichen die Temperaturänderungen dynamisch zu sehen wäre sehr schön. Besonders bei einem Vortrag.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sind die Daten denn statisch oder möchtest du Daten live anzeigen? Wenn ersteres der Fall ist, dann würde ich einfach einzelne Plots für die verschiedenen Zeitschritte abspeichern und diese am Ende zu einem Video zusammenfügen. Du musst halt nur dafür sorgen, dass die Skalen alle gleich bleiben. Das ist aber schnell gemacht.
Das Leben ist wie ein Tennisball.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Lienz20013 hat geschrieben:Ja genau ich möchtest was bewegtes präsentieren um die Dynamik des Systems zu veranschaulichen.
Ein guter Startpunkt um Animationen mit Matplotlib zu lernen ist
http://matplotlib.org/1.4.2/examples/an ... decay.html
Es ist aber auch nur ein Startpunkt, die X-Skala verhält sich bei dem Beispiel ganz furchtbar. Wenn Du damit selbst was probierst und dafür Hilfe brauchst, dann versuch den Animationscode vom Pandas Code zu trennen und poste hier lauffähige Beispiele, in denen Du die darzustellenden Daten mit einfachen Funktionen selbst erzeugst.

Eine andere Möglichkeit die Daten zu untersuchen ist, den Plot mit einem Slider zu verknüpfen. Wenn Du den Slider bewegst, dann wird ein bestimmter Parameter variiert (z.B. das dargestellte Zeitfenster). In meiner Auswertsoftware haben die Benutzer mehrere solche Slider um die Daten zu analysieren.
In "IPython Interactive Computing and Visualization Cookbook" wird in einem Rezept gezeigt, wie man das mit einem IPython Notebook macht. Es ist ein sehr gutes Buch, das auch Pandas Rezepte enthält.
a fool with a tool is still a fool, www.magben.de, YouTube
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Ja das hilft mir irgendwie nicht weiter. Das Buch habe ich nicht und wie soll ich Messwerte mit einer Funktion erzeugen? Vieleicht ist diese Sache doch komplizierter wie gedacht. Ich dachte nur da ich eine Zeitreihe habe ist es nicht so schwer diese auch zu animieren. Ich habe mal das Propbiert:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.animation as animation

def generate_data():
    a = FBGS_newi
    b = T_fiber_depth_new
    return a-b

def update(data):
    mat.set_data(data)
    return mat 

def data_gen():
    while True:
        yield generate_data()

fig, ax = plt.subplots()
mat = ax.matshow(generate_data())
plt.colorbar(mat)
ani = animation.FuncAnimation(fig, update, data_gen, interval=500,
                              save_count=50)
plt.show()
Antworten