2015-06-16 3 views
6

Ich habe zwei verschiedene Zeitserien, die ich in einem Diagramm grafisch darstellen möchte.Wie kann ich zwei verschiedene Zeitserien in einem Python in einem Plot plotten

Beide sind Serien zwischen 12: 30: 00 ~ 1: 25: 00, aber ihre Zeitsequenz sind unterschiedlich: eine ist 5 Sekunden und die andere ist etwa 10,3 Sekunden. Der Typ beider Serien ist "pandas.core.series.Series". Der Typ des Zeitindex ist string und aus strftime gemacht.

12:30:05 0.176786 
12:30:15 0.176786 
12:30:26 0.176786 
... 
13:22:26 0.002395 
13:22:37 0.002395 
13:22:47 0.001574 

und Serie B wäre:

import matplotlib.pyplot as plt 
A.plot() 
B.plot() 
plt.gcf().autofmt_xdate() 
plt.show() 
: Zum Beispiel würde Serie A sein

12:30:05 0.140277 
12:30:10 0.140277 
12:30:15 0.140277 
... 
13:24:20 0.000642 
13:24:25 0.000642 
13:24:30 0.000454 

Ich habe von beiden der Serie auf einer gleichen Grundstück zu zeichnen versucht,

und es funktioniert so:

enter image description here

Es ist offensichtlich, dass die blauen Linien im ersten Graph um 12:55:05 verschwinden, weil Serie A nur halbe x Punkte von B hat und plot() die Grafik nur nach der Reihenfolge der x-Achse anordnet das Zeitintervall.

Es ist ganz klar, wenn ich Serie A allein Grundstück:

enter image description here

Was ich will, ist die zwei Reihen in einem gleichen Plot gezeigt zu machen und angeordnet auf dem wahren Zeitintervall basieren. Idealerweise sollte das Grundstück sein, ähnlich wie:

enter image description here

ich, dass ich meinen Standpunkt klar gemacht habe Hoffnung. Wenn etwas verwirrend ist, lass es mich wissen.

+0

was 'a' und 'X' in Ihrem Code? Wie speichern Sie die beiden Serien? Könnten Sie dies zu einem [MCVE] (http: // http: // stackoverflow.com/help/mcve) machen? – tom

+0

Entschuldigung für meinen Fehler. Ich habe es korrigiert. Im ursprünglichen Beitrag steht a für die Serie A und x für die Serie B. Ich weiß nicht, wie Sie die Daten online zur Überprüfung bereitstellen können. Vielleicht nutzen Sie einfach die Daten, die ich gepostet habe (6 Datenpunkte für jede Serie), wäre in Ordnung. – user3284048

+1

Was ist der Typ von 'A' und' B'? Irgendein Pandas Datenrahmen? Wenn ja, sollten Sie es erwähnen ... –

Antwort

4

Dadurch werden die Datumsangaben direkt erstellt und nicht in Zeichenfolgen konvertiert. Vielleicht möchten Sie stattdessen matplotlib.dates.datestr2num, abhängig von Ihrem ursprünglichen Format. Dann werden sie in die Datetime-Repräsentation von Matplotlib konvertiert. Dies scheint ein Problem zu sein, bedeutet aber, dass der Abstand für die Zeiten korrekt ist.

import matplotlib.pyplot as plt 
from matplotlib.dates import date2num , DateFormatter 
import datetime as dt 

# different times from the same timespan 
TA = map(lambda x: date2num(dt.datetime(2015, 6, 15, 12, 1, x)), 
     range(1, 20, 5)) 
TB = map(lambda x: date2num(dt.datetime(2015, 6, 15, 12, 1, x)), 
     range(1, 20, 3)) 
A = [1.2, 1.1, 0.8, 0.66] 
B = [1.3, 1.2, 0.7, 0.5, 0.45, 0.4, 0.3] 

fig, ax = plt.subplots() 
ax.plot_date(TA, A, 'b--') 
ax.plot_date(TB, B, 'g:') 
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S')) 
plt.show() 

enter image description here

Verwandte Themen