2015-05-18 16 views
6

CURA: in seguito alla raccomandazionein R, eventi trama sucessive/sequenza

Sto cercando di creare una trama semplice della frequenza di eventi consecutivi sulla base di questo post: ggplot sequence patterns

vorrei accumularsi la stessa trama, ma per gli altri soggetti (diverse sequenze) soggetti "aa", "bb", "cc"

l'esempio set di dati è la seguente:

subject <- c("aa","aa","aa","aa","aa","aa","aa", "bb","bb","bb","bb","bb","bb","bb","cc","cc","cc","cc","cc","cc","cc") 
event <- c("P","C","D","C","P","E","D","C","P","E","D","P","C","E","P","E","D","P","C","x","x") 
freq <- c(3,2,1,4,2,1,0,3,4,1,3,3,1,2,1,3,2,1,4,0,0)) 

dfx <- data.frame(subject, event, freq) 

Il risultato che ottengo è: my result, bad

Utilizzando questo codice, in base al post originale:

library(ggplot2) 

dfx$type <- factor(dfx$type) 
dfx$ymin <- c(0,1,2) 
dfx$ymax <- c(1,2,3) 
dfx$xmax <- cumsum(dfx$count) 
dfx$xmin <- c(0, head(dfx$xmax, n=-1)) 

plot_x <- ggplot(dfx, 
      aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,fill=type)) +geom_rect(colour="grey40", size=0.5) 

png("plot_x.png", height=200, width=800) 
print(plot_x) 
dev.off() 

Ho creato questa immagine con quello che vorrei tracciare. (è fatto a mano in Excel). In questo caso, abbiamo 3 soggetti, 4 eventi (C, P, D, E) +1 evento fittizio (X), necessario per creare il frame dei dati. Come puoi vedere, il numero totale di eventi non è necessario uguale su ogni argomento. expected

+0

Si dovrebbe anche condividere il codice per il "risultato che hai" parte. – MrFlick

+1

L'esempio di quale output si sta puntando sarebbe più facile da capire se si riferisse ai dati di esempio che si stanno fornendo. O dai i dati dietro l'esempio come hai fatto tu, o fai un esempio che corrisponda ai dati che hai tu. – arvi1000

+0

Grazie per i tuoi consigli !. Ho modificato il mio post di conseguenza. – jgfdsa

risposta

1

Prova utilizzando facet_grid o facet_wrap

library(ggplot2) 
p1 <- 
    ggplot(dfx, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = event))+ 
    theme_bw() + 
    geom_rect(colour = "black", size = 0.5) + 
    facet_grid(subject ~ .) + 
    theme(axis.ticks.y=element_blank(), axis.text.y=element_blank()) 

p1 

enter image description here DATI:

dfx <- data.frame(
     subject = c("aa","aa","aa","aa","aa","aa","aa", "bb","bb","bb","bb","bb","bb","bb","cc","cc","cc","cc","cc","cc","cc"), 
     event = c("P","C","D","C","P","E","D","C","P","E","D","P","C","E","P","E","D","P","C","x","x"), 
     freq = c(3,2,1,4,2,1,0,3,4,1,3,3,1,2,1,3,2,1,4,0,0), 
     ymin = 0, 
     ymax = 1) 

TEMP  <- tapply(dfx$freq,dfx$subject,cumsum) 
dfx$xmax <- unlist(TEMP) 
dfx$xmin <- c(0, head(TEMP$aa, -1), 0, head(TEMP$bb, -1), 0, head(TEMP$cc, -1)) 
+0

Grazie! L'ho provato ed è una soluzione semplice e buona. Molte grazie!!! – jgfdsa