使用自定义颜色,图例等在ggplot中绘制多个数据系列的正确方法

时间:2013-02-04 13:52:31

标签: r ggplot2

我想逐步构建一个包含几个不同长度的数据系列的图。我的目标是能够控制每个数据系列的外观, 给他们自定义名称  并有适当的传说。我的数据系列有不同的长度,所以 我不能把它们放在一个数据帧中。 在下面的代码中我期望4行:最短的将是红色,下一个将分别是蓝色,绿色和黑色

    library(ggplot2)
    set.seed(12345)
    plt <- ggplot()
    colors <- c('red', 'blue', 'green', 'black')
    for(i in seq(length(colors))) { 
      x <- seq(1, 2*i)
      y <- x * i + rnorm(length(x))
      df <- data.frame(x=x, y=y)
      plt <- plt +  geom_point(aes(x, y), data=df, color=colors[i]) + 
        geom_line(aes(x, y), data=df, color=colors[i]) 
    }
    print(plt)

这就是我得到的。 my plot

如何为线条命名并显示图例? 有没有更好的方法来实现我的目标?

2 个答案:

答案 0 :(得分:2)

执行此操作的方法是以长格式创建单个数据框:

像这样:

library(ggplot2)
set.seed(12345)
colors <- c('red', 'blue', 'green', 'black')
dat <- lapply(seq_along(colors), function(i){
  x <- seq(1, 2*i)
  data.frame(
    series = colors[i],
    x = x,
    y = x * i + rnorm(length(x))
  )}
)
dat <- do.call(rbind, dat)

现在绘制

ggplot(dat, aes(x, y, color=series)) + geom_line() 

enter image description here

答案 1 :(得分:2)

在构造数据后,您不必每次都使用for-loop绘图,因为它们的长度不相等。这就是为什么ggplot2太棒了!您可以为每个数据集创建group。并且您可以使用与图例中显示的相同group将该行命名为您想要的任何内容(当然,如果您愿意,您也可以直接在图例中更改它)。这就是我的想法:

set.seed(12345)
require(ggplot2)
require(plyr)
# to group your data. change the letters to whatever you want to appear as legend
line_names <- letters[1:4]
# Use plyr to create your x and y for each i and add the group.
dat <- ldply(1:length(colors), function(i) {
    x <- seq(1, 2*i)
    y <- x * i + rnorm(length(x))
    data.frame(x=x, y=y, grp=line_names[i])
})

# just plot here.
ggplot(data = dat, aes(x=x, y=y)) + geom_line(aes(colour=grp)) + geom_point()

ggplot2_multiple_lines