2016-06-07 20 views

Antwort

1

Ich möchte ein anderes Format für die Daten vorschlagen, wobei jede Aktivität eine Start- und eine Endzeit hat.

Bibliotheken laden. dplyr wird nur zum Manipulieren des Datasets verwendet und nicht unbedingt benötigt.

library(ggplot2) 
library(dplyr) 

Zuerst lesen wir den Datensatz

activities <- read.csv2(
text= 
    "Person; Activity; Activity start; Activity end 
    A; Activity 1; 10:30; 11:30 
    A; Activity 2; 12:00; 13:00 
    A; Activity 3; 14:00; 16:00 
    B; Activity 1; 10:30; 11:30 
    B; Activity 2; 11:30; 13:00 
    B; Activity 3; 14:00; 14:30" 
) %>% 
    mutate(
     Activity.start = as.POSIXct(Activity.start, format="%H:%M"), 
     Activity.end = as.POSIXct(Activity.end, format="%H:%M"), 
     Person = as.factor(Person) 
) 

So, jetzt wir die richtigen Klassen für die Spalten haben, und wir können dieses Grundstück mit

ggplot(activities) + 
    geom_rect(
     aes(
      xmin=Activity.start, 
      xmax=Activity.end, 
      fill=Activity, 
      ymin=as.numeric(Person)-.5, 
      ymax=as.numeric(Person)+.5) 
     ) + 
    scale_y_continuous(labels=levels(activities$Person), breaks=1:2) + 
    geom_text(
     aes(x=(Activity.start + (Activity.end - Activity.start)/2), y=as.numeric(Person), label=Activity) 
    ) + 
    xlab(NULL) + 
    ylab("Person") 

, die in

führt

Example plot

1

Während dies normalerweise nicht die Art von Grafik ist, die Sie in R erstellen würden, könnten Sie es sicherlich mit ausreichender Beinarbeit durchführen.

Ich denke, das bekommen Sie jumpstarted:

require(lubridate) 
require(ggplot2) 

df    <- as.data.frame(matrix(nrow=14,ncol=3)) 
colnames(df) <- c("Person", "Time", "Activity") 
df$Person  <- c("A","A","A","A","A","A", "A", 
        "B","B","B","B","B","B", "B") 
df$Time   <- as.character(hours(c(10,11,12,13,14,15,16))) 
df$Activity  <- c(NA, "Activity 1", NA, "Activity 2", NA, "Activity 3","Activity 3", 
        NA, "Activity 1", "Activity 2", NA, NA, "Activity 3", NA) 

ggplot(df, aes(Time, Person)) + geom_tile(aes(fill = Activity), 
               colour = "white") + scale_fill_manual(values = rainbow (3)) 

enter image description here

Sie es auf die nächste Ebene durch die Erkundung der ggplot2 Optionen und machen eine weitere Anpassung es näher an das Bild zu bekommen nehmen Sie zog . Zum Beispiel sollten Sie

  • ändern sich die Abmessungen der Stäbe
  • Overlay die Etiketten von der Legende der Lage sein (geom_label ist ein Weg)
  • Feinabstimmung der Striche

nur durch überlesen und die Optionen optimieren. Ich habe vor kurzem eine Antwort auf sehr individuelle Tick-Markierungen gegeben, die Sie auf SO mit einer schnellen Suche finden können.