1

我想逐步构建一个包含多个不同长度的数据系列的图。我的目标是能够控制每个数据系列的外观,给它们自定义名称并拥有适当的图例。我的数据系列有不同的长度,所以我不能把它们放在一个数据框中。在下面的代码中,我预计有 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)

这就是我得到的。 我的阴谋

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

4

2 回答 2

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

在此处输入图像描述

于 2013-02-04T14:02:53.203 回答
2

您不必for-loop在构建数据后每次都使用 a 和 plot ,因为它们的长度不等。这就是为什么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

于 2013-02-04T14:03:04.940 回答