2016-06-07 42 views

回答

1

我想提出另一種數據格式,其中每項活動都有一個開始和結束時間。

加載庫。 dplyr僅用於操作數據集,並非嚴格需要。

library(ggplot2) 
library(dplyr) 

首先我們先讀數據集

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

所以現在我們有正確的班列,我們可以用

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

導致

繪製此Example plot

1

雖然這通常不是您在R中創建的圖形類型,但您可以通過足夠的腿部工作將其拉下。

我認爲這將讓你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

你可以把它帶到一個新的水平通過探索ggplot2選項,並做進一步的定製,以獲得更接近您繪製的圖片。舉例來說,你應該能夠

  • 變化吧
  • 覆蓋從圖例標籤(geom_label是單程)
  • 微調刻度線

只是尺寸閱讀並調整選項。我最近給出了高度定製的刻度標記的答案,您可以通過快速搜索找到它。