箭头指向从标签的数据

时间:2013-06-25 16:25:50

标签: r ggplot2

我有一些相关的时间序列我想要一起绘制。我正在使用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

我试过`直接标签',但我似乎无法得到它

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

1 个答案:

答案 0 :(得分:1)

虽然这并没有完全回答你的问题,但我想要包括一些我的意思的照片,所以我把它放在一个答案中。

如果 rank 真的是你想要展示的,那么我特别推荐热图。除了不使用速率作为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

在任何一种情况下,我认为您使用热图(排名本身)添加额外维度的数据,但代价是更难以确定准确率。