in einem Diagramm 2 x-Achsen

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.
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

@BlackJack: Die Daten sind aber in einem nahezu identischen Zeitraum. Sollte ich mich irren, dann muss er seine Messergebnisse eben in Relation zu einem bestimmten Ereignis präsentieren. In seinem Fall könnte das beispielsweise das Einschalten des Ofens sein.

@Nait: Das hier sollte funktionieren.

Code: Alles auswählen

...
#self.timeKurve sind y-Werte die schon in vorigem Quelltext erstellt wurden
self.plotCH_Zeit.plot(self.timeAchseData,self.timeKurve,'g',linewidth = 0.6)

self.plotCH_Zeit.twinx()
self.plotCH_Zeit.twiny()

try:
    self.timeAchseOfen = self.TimeAchse(self.dataOfen,typ = 'Ofen')

    #self.ofenKurve ist die Temperatur die ebefnalls schon in vorhergegangenem Code erstellt
    self.plotCH_Zeit.plot(self.timeAchseOfen,self.ofenKurve,'r',linewidth = 0.8)
except:
    ...
Denoch würde ich dir raten nur eine Zeitachse zu verwenden. Mit zwei x-Achsen verzerrst du dein Ergebnis und es wird (außer dir vielleich) keiner mehr sinnvoll interpretieren können.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Also, für mich stellt sich das im Alltag eher so da:
- entweder es gibt zwei Detektoren, die zwei nicht in unmittelbarer Beziehung stehende Signale zu verschiedenen Zeitpunkten messen: übereinanderplotten unter Berücksichtigung der verschieden "X-Werte", aber bei einer gemeinsamen X-Achse. Eine gemeinsame X-Achse / Abszissenachse weil es sich ja um den selben Datentyp handelt. Alles andere verwirrt und ist falsch, wie hier mehrfach ausgeführt.
- oder es gibt zwei Detektoren, die zwei in unmittelbarer Beziehung stehende Signale zu verschiedenen Zeitpunkten messen, z. B. weil das zu messende Objekt sich von einem zum anderen Detektor bewegt: in diesem Fall kann ein Alignmentproblem vorliegen. Hier kann man den zeitlichen Versatz zwischen den Detektoren bestimmen und das Signal des zweiten Detektors beispielweise auf dasjenige des ersten "alignen", sprich: verschieben. Danach würden die Signale die x-Werte teilen und können wie gehabt übereinander geplottet werden.

Beispiel für Fall 1: In einem Topf wird zeitabhängig Feuchtigkeit und Temperatur gemessen. Die Detektoren samplen u. U. unterschiedlich, setzten zu unterschiedlichen Zeitpunkten ein.
Beispiel für Fall 2: Lösung wird durch einen Schlauch / Kapillare gepumpt und kommt erst ein Detektor 1, dann 2 an. Beide Detektoren messen jedoch ein und die selbe Probe, nur eben zu unterschiedlichen Zeitpunkten, u. U. auch unterschiedlich gesampled.

Die Aufnahmerate / das Sampling bestimmt allenfalls die Auflösung des Alignments im Fall 2, hat aber nichts mit dem Plotting an sich zu tun.

Alignmentprobleme können mit scipy's interpolate ganz gut verbessert werden, da dann die apparente Auflösung besser werden kann. Man gewinnt zwar nicht tatsächlich Auflösung, oftmals aber etwas Sicherheit im Umgang mit den Daten, weil man so auch das Rauschen in den Griff bekommen kann. Falls Du da etwas mehr wissen willst, hilft das scipy-Cookbook.

HTH
Christian
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@Nait: Noch eine Anmerkung zum Umwandeln von Zeichenketten in ein datetime-Objekt:

Code: Alles auswählen

from datetime import datetime
time = datetime.strptime('15.02.2011 11:22:23', '%d.%m.%Y %H:%M:%S')
Nait
User
Beiträge: 13
Registriert: Dienstag 26. April 2011, 10:53

Erst mal Danke für die Infos,

ich muss ja sagen dass ich es interessant finde wie hier verschiedene Meinungen zu einem Thema zusammenkommen. Im Gegensatz zu anderen Foren wird hier wenigstens sich nicht angekeift und darauf beharrt das nur eine Meinung richtig sein kann.

Und ich muss sagen das man auch 2 Kurven miteinander vergleichen kann auch wenn x-und y-Achsen unterschiedlich sind. Solange man den Trend vergleicht ist das möglich. Wenn ich mir vorstell ich hab 2 seperate Diagramme, dann kann ich zu jeder Kurve die Aussage treffen ob diese steigend,fallend, usw. ist. Ganz gleich welche Rahmenbedingungen vorherrschen. Und ich kann dann auch Aussage zu einer anderen Kurve tätigen die völlig anders aufgebaut ist. Denn ich kann ja die Aussage treffen, dass bei beiden Kurven der Trend herrscht sich mit längerem x-Wert zu steigern oder zu fallen, etc.
Für mich wärs einfach nur interessant gewesen ob das mit der zweiten x-Achse möglich ist.

@Rekrul:
Ich hab deinen Quelltext mal so probiert, jedoch wird mir ein ValueError geworfen, vielleicht sagt der euch was:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\devoegse\Desktop\Python\Brose\Version 2\Datenauswertung.py", line 319, in UseLimitkurve
self.stat.Plot()
File "C:\Dokumente und Einstellungen\devoegse\Desktop\Python\Brose\Version 2\Statistik.py", line 332, in Plot
self.uiStat.mplwidgetZeit.draw()
File "C:\Programme\Python27\lib\site-packages\matplotlib\backends\backend_qt4agg.py", line 130, in draw
FigureCanvasAgg.draw(self)
File "C:\Programme\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 394, in draw
self.figure.draw(self.renderer)
File "C:\Programme\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Programme\Python27\lib\site-packages\matplotlib\figure.py", line 798, in draw
func(*args)
File "C:\Programme\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Programme\Python27\lib\site-packages\matplotlib\axes.py", line 1946, in draw
a.draw(renderer)
File "C:\Programme\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Programme\Python27\lib\site-packages\matplotlib\axis.py", line 971, in draw
tick_tups = [ t for t in self.iter_ticks()]
File "C:\Programme\Python27\lib\site-packages\matplotlib\axis.py", line 904, in iter_ticks
majorLocs = self.major.locator()
File "C:\Programme\Python27\lib\site-packages\matplotlib\dates.py", line 743, in __call__
self.refresh()
File "C:\Programme\Python27\lib\site-packages\matplotlib\dates.py", line 752, in refresh
dmin, dmax = self.viewlim_to_dt()
File "C:\Programme\Python27\lib\site-packages\matplotlib\dates.py", line 524, in viewlim_to_dt
return num2date(vmin, self.tz), num2date(vmax, self.tz)
File "C:\Programme\Python27\lib\site-packages\matplotlib\dates.py", line 289, in num2date
if not cbook.iterable(x): return _from_ordinalf(x, tz)
File "C:\Programme\Python27\lib\site-packages\matplotlib\dates.py", line 203, in _from_ordinalf
dt = datetime.datetime.fromordinal(ix)
ValueError: ordinal must be >= 1

Danke
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

Kommt der Fehler auch wenn du twiny auskommentierst?
Nait
User
Beiträge: 13
Registriert: Dienstag 26. April 2011, 10:53

Nein, in dem Fall führt er es aus.
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

Hmmm .... ich habe das was ich dir gegeben habe auch bei mir getestet und es funktioniert so, wie du es dir vorstellst. Vielleicht liegt der Fehler bei TimeAchse. Test doch mal das Ergebnis ausführlich.


PS: Ich hoffe du hast dir mal die Mühe gemacht den Tip von gkuhl umzusetzen. Es ist schon sehr komisch, dass bei dir die Daten 'hintereinander' geplottet werden. Da *kann* also irgend etwas nicht stimmen. (Vorausgesetzt die Zeiträume überlappen sich wirklich).
Antworten