2013-06-25 104 views
1

我有許多相關的時間序列,我想一起繪製。我使用ggplot2 這裏是什麼我的數據看起來像一個例子:指向標籤數據的箭頭

set.seed(0) 
require(ggplot2) 
id <- LETTERS[1:18] 
appDates <- as.Date("2000-01-01", origin = '1970-01-01') + 1:10 
appRate <- runif(18, 1,4) 
appRank <- rank(-appRate - colSums(anorm)) 

anorm <- array(rnorm(18*11), c(11,18)) 
tempDf <-lapply(seq_along(appDates), function(x) data.frame(adate = appDates[x], group = 1:18, id = id, arate = appRate + colSums(anorm[1:(x+1),]), ranked = appRank)) 

tempDf <- do.call(rbind, tempDf) 
ggplot(tempDf, aes(x = adate, y = arate, group = group, color = id)) + geom_line() 

這是不錯,但我想箭頭從ID標籤,將相關的時間序列,因爲它是很難挑選出一個特定的顏色相似的路徑。

enter image description here

我已經試過`directlabels',但我似乎無法完全得到它

p <- ggplot(tempDf, aes(x = adate, y = arate, group = group, color = id)) + geom_line() 
require(directlabels) 
direct.label(p,list(last.points, hjust=0.8, vjust = 1)) 

enter image description here

由什麼,我有點找

手工完成粗例子

enter image description here

隨着最終排名的增加,我添加了不同的線條厚度以幫助識別。

p <- ggplot(tempDf, aes(x = adate, y = arate, group = group, color = id, size = ranked)) + geom_line() 
p + scale_size(range=c(2.6, 0.4), guide=FALSE)+ 
     guides(colour = guide_legend(override.aes = list(size=seq(2.6,0.4, length.out = 18)[appRank]))) 

enter image description here

+0

在我看來,'directlabels'版本看起來比箭頭好得多;以編程方式實現也更容易。 – baptiste

+0

是的,我意識到一旦他們全部進來,箭頭就會顯得很糟糕。也許顏色方案的改變可能會有所幫助。現在很難挑出時間序列。 – user1609452

+1

@ user1609452不錯的問題。不管你做什麼,18個時間序列都會被看作是醜陋的,但更重要的是,這將很難得出推論。在[最近的答案](http://stackoverflow.com/questions/17280468/data-visualization-in-r/17281228#17281228)我建議用戶使用熱圖來可視化這些多個時間序列;在這種情況下可能也不合適?很容易將這些組分開,並且可以在不同的時間點輕鬆比較任何組。 – nograpes

回答

1

儘管這不會回答你的問題正是,我想包括我的意思了一些照片,所以我把它放在一個答案。

如果排名真的是你想展示的,那麼我特別推薦熱點地圖。除了使用比率作爲Y軸,您使用排名,並使用比率作爲填充顏色。這裏是我的意思是:

# I think your rank was broken -- but I might be missing something. 
tempDf$real.rank<-unlist(by(tempDf$arate,tempDf$adate,rank)) 
ggplot(tempDf, aes(x = adate ,fill = arate, y = real.rank)) + ] 
    geom_tile() + 
    geom_text(aes(label=id),color='white') 

enter image description here

如果你真的想強調在排名的變化,你可以在字母之間畫線:

ggplot(tempDf, aes(x = adate ,fill = arate, y = real.rank)) + 
    geom_tile() + 
    geom_text(aes(label=id),color='white') + 
    geom_line(aes(group=id,color=id)) 

enter image description here

在任何一種情況下,我都認爲你需要在熱圖上增加一個額外的數據維度,而這個數據本身是以犧牲使它更難以告訴準確率。

+0

是的,我真的很喜歡。我會在我的數據集上嘗試一下,看看它的外觀。 – user1609452