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: wieso soll eine solche Interpretation schlicht *falsch* sein? Die Werte haben doch lediglicht eine andere Abtastfrequenz, liegen aber großteils im selben Zeitraum. Da lassen sich dennoch Korrelationen der Werte feststellen.

@Nait: Bist du dir sicher, dass du in deiner TimeAchse-Funktion ( :? ) nicht vielleicht einen Fehler hast und es daher bei dir so ausschaut, als würde matplotlib die Kurven 'aneinanderhängen'?
Nait
User
Beiträge: 13
Registriert: Dienstag 26. April 2011, 10:53

Das ist natürlich möglich. Aber da ich nicht weiß wie ich eine zweite x-Achse zusätzlich ur zweiten y-Achse einbaue, verschieben sich die Kurven. Das ist meien Vermutung. Wie twiny funktioniert versteh ich, auch wie twinx an sich funktioniert. Jedoch nicht wie ich die 2 kombinieren kann.

Kann da jemand nen kurzen Quellcode geben wie das aussehen muss?

Hier mal mein teil ncohmals:

Code: Alles auswählen

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

        ofenKurve  = self.plotCH_Zeit.twinx()

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

            #self.ofenKurve ist die Temperatur die ebefnalls schon in vorhergegangenem Code erstellt
            #wurde  
            ofenKurve.plot(self.timeAchseOfen,self.ofenKurve,'r',linewidth = 0.8)
        except:
            reply = QtGui.QMessageBox.information(self, 'Message',"Info:\r\nEs sind keine Ofendaten vorhanden.",QtGui.QMessageBox.Ok)
Wo müsste ich da twinx einbauen das es funktioniert? Ich habe schon damit rumgespielt jedoch bisher nur Fehlermedlungen bekommen.

Bin für jede Hilfe dankbar
BlackJack

@Rekrul: Wenn die beiden Zeiträume nahezu identisch sind, dann kann man die beiden Datenreihen mit *einer* Zeitachse darstellen. Also müssen sie ja schon so verschieden sein, dass man die beiden Kurven übereinander gelegt nicht mehr sinnvoll in einem Diagramm vergleichen kann. Und dann ist eine relative Interpretation falsch. Da kann man sich noch so sehr anstrengen, so eine Grafik suggeriert einfach einen falschen Zusammenhang.
Nait
User
Beiträge: 13
Registriert: Dienstag 26. April 2011, 10:53

@BlackJack:
Das stimmt so nicht, wie gesagt du kannst den Trend der zwei Kurven betrachten. Weiteres Beispiel:
Eine Firma produziert Bauklötze. Im jahr 2008 wurde allerdings nur sporadisch aufgenommen wie viele Klötze täglich gebaut wurden. In den Darauffolgenden Jahren wurden immer mehr Klötze produziert und aufgenommen. Jetzt sind die x-Achsen aller Jahre unterschiedlich, jedoch kann anhand jeder Kurve gesehen werden ob die Firma mehr Klötze Produziert oder weniger. Eben weil nur der Trend betrachtet wird. Das alles ist auch in einem Diagramm Darstellbar und solange klar ist zu welcher Kurve welche x-Achse gehört ist die Interpretation auch kein problem.
BlackJack

@Nait: Der Vergleich hinkt weil die Anzahl der Bauklötzchen ja die selbe Messgrösse ist *und* hier die beiden Zeiträume ganz klar disjunkt sind. Allerdings wäre es auch hier ein leichtes die Daten so darzustellen, dass sie tatsächlich relativ verglichen werden können. Also dass *eine* Skala mit einem Jahreszeitraum existiert und nur in der Legende die Jahreszahl steht. Dann kann man dort auch wieder die beiden Kurven direkt vergleichen und ablesen wie die Entwicklung denn zum Beispiel Mitte Juni in den beiden Jahren war.
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