Connessione tra valori mancanti con geom_line

Sto cercando di capire se è ansible connettersi tra i valori mancanti usando geom_line. Ad esempio, nel link sottostante ci sono valori mancanti al tempo 3 in facet F. Mi piacerebbe che una linea collegasse il tempo 2 e 4 in quel caso. C’è un modo per ottenere questo?

https://farm8.staticflickr.com/7061/6964089563_b150e0c2a6.jpg

Ho un quadro di dati di valori cumulativi in ​​questo modo:

head(cumulative) individual series Time Value 1 A x 1 -1.008821 2 A x 2 -2.273712 3 A x 3 -3.430610 4 A x 4 -4.618860 5 A x 5 -4.893075 6 A x 6 -5.836532 

Con quale sto tramando:

 ggplot(cumulative, aes(x=Time,y=Value, shape=series)) + geom_point() + geom_line(aes(linetype=series)) + facet_wrap(~ individual, ncol=3) 

La risposta di Richie è molto accurata, ma volevo mostrare qualcosa di più semplice. Poiché le linee non sono disegnate su punti NA , un altro approccio è la caduta di questi punti quando si disegnano le linee. Ciò implica implicitamente un’interpolazione lineare tra i punti (come fanno le linee rette).

Usando dfr dalla risposta di Richie, senza aver bisogno del calcolo del passo z :

 ggplot(dfr, aes(x,y)) + geom_point() + geom_line(data=dfr[!is.na(dfr$y),]) 

Del resto, in questo caso l’inserimento può essere fatto per l’intera faccenda.

 ggplot(dfr[!is.na(dfr$y),], aes(x,y)) + geom_point() + geom_line() 

Le linee non vengono disegnate se un valore è NA . È necessario sostituirli interpolando tra i punti mancanti. Esistono molti algoritmi diversi per l’interpolazione, è necessario sperimentare diversi e vedere quale si adatta meglio ai propri dati. Questo esempio utilizza l’interpolazione lineare tramite interp1 nel pacchetto pracma .

Dati di esempio:

 dfr <- data.frame( x = 1:10, y = runif(10) ) dfr[c(3, 6, 7), "y"] <- NA 

Fase di interpolazione:

 dfr$z <- with(dfr, interp1(x, y, x, "linear")) 

Confronta i grafici:

 ggplot(dfr, aes(x, y)) + geom_line() ggplot(dfr, aes(x, z)) + geom_line() 

Se stai mostrando questo grafico ad altre persone, assicurati di contrassegnare chiaramente i luoghi in cui hai sintetizzato i dati interpolando (magari usando linee tratteggiate).


Aggiornamento basato sul commento:
È ansible specificare un'estetica diversa per le diverse aree geografiche.

 ggplot(dfr, aes(x)) + geom_point(aes(y = y)) + geom_line(aes(y = z)) 

Per incorporare diversi tipi di linea per y mancanti / non mancanti, puoi fare qualcosa di simile

 ggplot(dfr, aes(x)) + geom_point(aes(y = y)) + geom_line(aes(y = y)) + geom_line(aes(y = z), linetype = "dotted")