2013-08-07 35 views
1

略有離奇的要求,我知道,但忍受着我。繪製甘特圖與R到亞秒級的精度

我有一個Excel電子表格,其中包含從服務器端代碼的高度並行位取得的一些日誌記錄數據。我試圖分析它在日誌中可能存在差距的地方,表明應記錄但不是的任務;但是因爲它是十幾個並行線程的串行時間戳列表,所以很難閱讀。所以我有一個非正統的想法,用甘特圖來顯示重疊的任務。 Excel在這方面很糟糕,所以我開始考慮替代工具,並且我想過嘗試R.

日誌中的每個任務都有一個開始時間戳,結束時間戳和一個持續時間,所以我得到的數據是I需要。我讀this SO post和肢解的例子到該R腳本:

tasks <- c("Task1", "Task2") 
dfr <- data.frame(
    name  = factor(tasks, levels = tasks), 
    start.date = c("07/08/2013 09:03:25.815", "07/08/2013 09:03:25.956"), 
    end.date = c("07/08/2013 09:03:28.300", "07/08/2013 09:03:30.409"), 
    is.critical = c(TRUE, TRUE) 
) 

mdfr <- melt(dfr, measure.vars = c("start.date", "end.date")) 

ggplot(mdfr, aes(as.Date(value, "%d/%m/%Y %H:%M:%OS"), name, colour = is.critical)) + 
    geom_line(size = 6) + 
    xlab("") + ylab("") + 
    theme_bw() 

這是不行的,雖然 - 它不繪製任何數據,以及時間軸是全亂了。我懷疑(不出所料)繪製亞秒甘特圖是一件很奇怪的事情。我是一個完整的R新手(儘管我一直在尋找一個可以試用這個技術很久的藉口) - 是否有簡單的方法來完成這項工作?

回答

1

首先,你的時間應該是POSIXct格式不是Date,因爲它包含小時和分鐘。您可以使用正確的格式將新列添加到融化的數據幀中。

mdfr$time<-as.POSIXct(strptime(mdfr$value, "%d/%m/%Y %H:%M:%OS")

然後用scale_x_datetime()可以控制在何處休息時間將是在軸線上。對於x值,使用正確格式的新列。

library(scales) 
ggplot(mdfr, aes(time,name, colour = is.critical)) + 
    geom_line(size = 6) + 
    xlab("") + ylab("") + 
    theme_bw()+ 
    scale_x_datetime(breaks=date_breaks("2 sec")) 
+0

工程就像一個魅力!謝謝! 現在要解決從CSV中獲取數據的問題:) –