2013-05-09 14 views
7

Sto pianificando i dati dei tempi utilizzando Matplotlib e alcuni dei dati mancano nella sequenza. Matplotlib implicitamente unisce l'ultimo punto dati contigui al successivo. Ma nel caso in cui mancano dei dati, la trama sembra brutta. Quanto segue è la trama ottenuta. enter image description hereMatplotlib rimuove l'interpolazione per i dati mancanti

Si può vedere che vicino al marker del 30 aprile mancano i dati e Matplotlib unisce i punti. Anche l'immagine seguente è il grafico a dispersione dei dati. Il grafico a dispersione copre questo errore, ma in questo caso i punti di dati contigui non saranno uniti. Inoltre, la trama di dispersione è molto lenta dato l'enorme numero di punti di dati coinvolti. enter image description here

Qual è la soluzione consigliata per tali problemi.

risposta

8

Se è possibile identificare in cui i punti di rottura dovrebbe essere è possibile:

  1. suddividere i dati e tracciare ogni sezione '' a mano
  2. inserto np.nan nei dati le lacune

Vedere ad esempio Plot periodic trajectories.

È possibile ottenere lo stesso effetto di scatter (se non si vuole scalare la dimensione o il colore di ogni punto in modo indipendente) con

ax.plot(x, y, linestyle='none', marker='o') 
+0

Terminato utilizzando Pandas che inserirà NaN –

+0

@NipunBatra Se hai fatto qualcosa di diverso, dovresti scriverlo come risposta e accettare la tua risposta. – tacaswell

4

Come la precedente risposta, dice, si dovrebbe inserire NaN dove ci non ci sono dati Questa risposta è specifica per Pandas e spiega come questo può essere raggiunto facilmente. O:

  • Series.resample() o
  • Series.reindex()

Il metodo più semplice da usare è resample(). Questo è il modo più conciso per i dati a intervalli regolari. Quindi nel tuo esempio sopra, se ne hai, ad es. 5 minuti di dati, basta fare data.resample("5 min"). Ciò restituirà il tuo set di dati con 'NaT' (tempo equivalente a NaN) nei valori mancanti.

L'unico caso in cui questo non funziona troppo è quando i campioni non sono regolarmente distanziati.

L'alternativa è reindex(), che funziona anche per dati ordinati (ma non per serie temporali). Quindi, ad esempio, se avessi un set di dati indicizzato con numeri interi da 0 a 100, ma con alcuni campioni mancanti, potresti fare data.reindex([0:100]). È inoltre possibile replicare il comportamento di resample con reindex, passando come argomento una funzione pandas.date_range().

Problemi correlati