2015-05-18 10 views
6

EDITED: nach der Empfehlungin R, Grundstück aufeinander/Sequenz Ereignisse

Ich versuche, eine einfache Handlung der Frequenz von aufeinanderfolgenden Ereignissen zu diesem Beitrag basiert zu erstellen: ggplot sequence patterns

Ich möchte bis stapeln die gleiche Handlung, sondern für andere Themen (verschiedene Sequenzen) Themen "aa", "bb", "cc"

das Beispiel-Datensatz ist wie folgt:

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) 

Das Ergebnis, das ich bekommen ist: my result, bad

diesen Code verwenden, basierend auf der ursprünglichen Nachricht:

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() 

Ich habe dieses Bild erstellt haben, mit dem, was Ich mag würde plotten. (Es ist handgefertigt in Excel). In diesem Fall haben wir 3 Subjekte, 4 Ereignisse (C, P, D, E), 1 Dummy-Ereignis (X), das notwendig ist, um den Datenrahmen zu erzeugen. Wie Sie sehen können, ist die Gesamtzahl der Ereignisse nicht für jedes Thema gleich. expected

+0

Sie sollten auch den Code für das "Ergebnis, das Sie bekommen" teilen Teil. – MrFlick

+1

Das Beispiel für die Ausgabe, die Sie anstreben, wäre leichter zu verstehen, wenn es sich auf die Beispieldaten bezieht, die Sie bereitstellen. Geben Sie entweder die Daten hinter dem Beispiel, wie Sie es haben, oder machen Sie ein Beispiel, das den Daten entspricht, wie Sie es haben – arvi1000

+0

Vielen Dank für Ihre Empfehlungen! Ich habe meinen Beitrag entsprechend bearbeitet. – jgfdsa

Antwort

1

Versuchen facet_grid oder facet_wrap mit

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 DATA:

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

Danke! Ich habe es getestet und es ist eine einfache und gute Lösung. Danke vielmals!!! – jgfdsa