2015-06-16 23 views
6

Ho due serie temporali distanziate diverse che voglio tracciare su uno stesso grafico.Come posso tracciare due serie temporali distanziate diverse su uno stesso grafico in Python

Entrambe sono serie tra 12: 30: 00 ~ 1: 25: 00 ma la loro sequenza temporale è diversa: una è di 5 secondi e l'altra è di circa 10,3 secondi. Il tipo di entrambe le serie è "pandas.core.series.Series". Il tipo dell'indice temporale è una stringa creata da strftime. Per esempio, serie A sarebbe:

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 

e di serie B sarebbe:

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 

ho cercato di tracciare sia della serie su una stessa trama da:

import matplotlib.pyplot as plt 
A.plot() 
B.plot() 
plt.gcf().autofmt_xdate() 
plt.show() 

e funziona così:

enter image description here

È ovvio che le linee blu nel primo grafico svaniscono verso le 12:55:05 perché la serie A ha solo metà x punti di B e plot() organizzano il grafico solo in base all'ordine dell'asse x, non l'intervallo di tempo.

Sarà chiaro se tracciare serie A da sola:

enter image description here

Quello che voglio è quello di rendere le due serie mostrato in una stessa trama e organizzare basa sulla vera intervallo di tempo. Idealmente, la trama dovrebbe essere simile come:

enter image description here

Spero di aver fatto il mio punto chiaro. Se qualcosa di confuso, per favore fatemelo sapere.

+0

quali sono '' a' e x' nel codice? come stai memorizzando le due serie? Potresti farlo in un [MCVE] (http: // http: //stackoverflow.com/help/mcve)? – tom

+0

Ci scusiamo per il mio errore. L'ho corretto Nel post originale, un supporto per le serie A e x sta per serie B. Non so quale sia il modo migliore per rendere i dati online da verificare. Forse basta usare i dati che ho postato (6 punti dati per ogni serie) andrebbe bene. – user3284048

+1

Qual è il tipo di 'A' e' B'? Qualche dataframe di Pandas? In tal caso, dovresti menzionarlo ... –

risposta

4

Ciò crea direttamente i dati, non li converte in stringhe; potresti invece preferire matplotlib.dates.datestr2num, a seconda del tuo formato originale. Quindi vengono convertiti nella rappresentazione datetime di matplotlib. Questo sembra un problema, ma significa che la spaziatura sarà corretta per i tempi.

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

Problemi correlati