2015-05-18 20 views
6

edycja: zgodnie z zaleceniemw R, imprezy fabuła sucessive/sekwencji

Próbuję utworzyć prosty wykres częstotliwości kolejnych zdarzeń opartych na tym stanowisku: ggplot sequence patterns

Chciałbym piętrzyć taki sam wykres lecz dla innych przedmiotów (różne sekwencje) Przedmioty "aa", "bb", "cc"

Przykładowy zestaw danych przedstawia się następująco:

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) 

Wynik pojawia się: my result, bad

Używając tego kodu, na podstawie oryginalnego postu:

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

Stworzyłem ten obraz z tym, co chciałbym wykreślić. (jest ręcznie w programie Excel). W tym przypadku mamy 3 podmioty, 4 zdarzenia (C, P, D, E) +1 zdarzenie obojętne (X), niezbędne do utworzenia ramki danych. Jak widzisz, całkowita liczba zdarzeń nie jest konieczna dla każdego przedmiotu. expected

+0

Należy również udostępnić kod dla "wynik dostałeś" część. – MrFlick

+1

Przykład wyników, do których dążysz, byłby łatwiejszy do zrozumienia, jeśli dotyczy przykładowych danych, które podajesz. Podaj dane za przykładem, jak je masz, lub zrób przykład, który pasuje do danych, tak jak go masz – arvi1000

+0

Dzięki za rekomendacje !. Odpowiednio zredagowałem swój post. – jgfdsa

Odpowiedz

1

Spróbuj użyć facet_grid lub 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 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

Dzięki! Przetestowałem to i jest to proste i dobre rozwiązanie. Wielkie dzięki!!! – jgfdsa