【问题标题】:Drawing arrows with two different colors depending on the direction in ggplot根据ggplot中的方向绘制两种不同颜色的箭头
【发布时间】:2013-04-04 16:08:43
【问题描述】:

我想根据方向更改箭头的颜色。我想在情节中插入箭头,但目前它们都是黑色的。我想要从左到右的绿色箭头和从右到左的红色箭头。这可能吗?

这是我的“短”代码:

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)

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

【问题讨论】:

    标签: r ggplot2


    【解决方案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 是用作因子而不是数值吗?

    【讨论】:

    • 谢谢!如果我正确理解代码,我必须将每个 n 映射到一种颜色。我认为有可能使用有关箭头方向的信息?因为我的数据集的长度是可变的。
    • 映射使用数据中的信息来确定方向,但在第二个示例中更是如此。
    • v 是一个数值。我修复了这个例子。谢谢你的第二个例子。我收到一个错误“错误:集合美学的长度不兼容:颜色、大小”。我想我知道“tapply”的想法是什么,但我无法弄清楚为什么会出现错误。
    • 太棒了!多谢。我需要一些时间来认识到我需要 nv 作为值来让它与我的实时数据一起使用。
    【解决方案2】:

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

    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)]) 
    

    【讨论】:

    • 感谢您的代码!我还有一个额外的专栏,里面有我脑海中的信息。但是认为必须有一种方法可以使用情节中已经存在的信息。在这里使用 ddply 的解决方案是个好主意。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 2013-05-05
    • 2010-12-05
    • 2017-02-22
    • 2016-11-18
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多