我想根据方向改变箭头的颜色。我想出在图中插入箭头,但此刻它们都是黑色的。我希望从左到右呈绿色,箭头从右到左呈红色。这可能吗?
这是我的"短"代码:
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)
提前感谢您提供任何帮助!
答案 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
中的函数ddply
为plyr
的每个级别计算的。 direction
变量可以有两个值TRUE
或FALSE
,具体取决于特定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)])