根据ggplot中的方向绘制两种不同颜色的箭头

时间:2013-04-04 16:08:43

标签: r ggplot2

我想根据方向改变箭头的颜色。我想出在图中插入箭头,但此刻它们都是黑色的。我希望从左到右呈绿色,箭头从右到左呈红色。这可能吗?

这是我的"短"代码:

library(ggplot2)

name = c("Name1","Name2", "Name1", "Name2")
time = c("1", "3","4","2")
value = c(5.1, 4.8, 4.1, 6.3)
data <- data.frame(name, time, value) 

p <- ggplot(data, aes(x=value, y=name)) +
  geom_point(aes(colour=time), shape=16, size=6) +
  geom_path(aes(group=name), arrow=arrow(length=unit(0.15,"cm")), colour="black", size=1) 
print(p)

提前感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:1)

看起来n可以用作箭头方向的代理,所以:

p +  geom_path(aes(group=n), arrow=arrow(length=unit(0.15,"cm")), colour=c("red","green")[factor(n)], size=1)

然而,更一般地说,我想你会想要这样的东西:

p +  geom_path(aes(group=n), arrow=arrow(length=unit(0.15,"cm")), colour=c("red","black","green")[(sign(tapply(v,n,diff))+2)[n]], size=1)

v是否意味着用作因子而不是数值?

答案 1 :(得分:1)

您可以将新列添加到我命名为direction的数据中。它是使用库name中的函数ddplyplyr的每个级别计算的。 direction变量可以有两个值TRUEFALSE,具体取决于特定value级别(正面或负面)的第一个和第二个name值之间的差异。

library(plyr)
data<-ddply(data,.(name),transform,direction=((value[1]-value[2])>0))
data
   name time value direction
1 Name1    1   5.1      TRUE
2 Name1    4   4.1      TRUE
3 Name2    3   4.8     FALSE
4 Name2    2   6.3     FALSE

使用此新变量为geom_path()设置颜色。

ggplot(data, aes(x=value, y=name)) +
  geom_point(aes(colour=time), shape=16, size=6) +
  geom_path(aes(group=name), arrow=arrow(length=unit(0.15,"cm")), size=1,color=c("red","blue")[factor(data$direction)])