使用for循环在单个图中用ggplot2绘制多条线

8

我试图在同一图中绘制多条线,如下所示:

y <- matrix(rnorm(100), 10, 10)
m <- qplot(NULL)
for(i in 1:10) {
    m <- m + geom_line(aes(x = 1:10, y = y[,i]))
}
plot(m)

然而,似乎在 plot(m) 过程中,qplot 会解析 m,其中 i10,因此 plot(m) 只会生成一条线。

我期望看到的是类似于:

plot(1,1,type='n', ylim=range(y), xlim=c(1,10))
for(i in 1:10) {
    lines(1:10, y[,i])
}

这应该包含10个不同的行。

有没有ggplot2的方法来做到这一点?

2个回答

11

不要运行循环,你应该用ggplot2的方式来处理。ggplot2需要数据以长格式呈现(可以使用reshape2::melt()转换)。然后通过一列(这里是Var2)分割线条。

y <- matrix(rnorm(100), 10, 10)
require(reshape2)
y_m <- melt(y)

require(ggplot2)
ggplot() +
  geom_line(data = y_m, aes(x = Var1, y = value, group = Var2))

这里输入图片描述


如何设置每行不同的颜色是最好的方式?例如第一行为红色,下一行为蓝色等等...然后可以将其放入图例中。 - James Ashwood

7
EDi提出的方式是最好的。如果你仍然想使用for 循环,你需要使用循环来生成数据框。
像下面这样:
# make the data
> df <- NULL
> for(i in 1:10){
+ temp_df <- data.frame(x=1:10, y=y[,i], col=rep(i:i, each=10))
+ df <- rbind(df,temp_df)} 

> ggplot(df,aes(x=x,y=y,group=col,colour=factor(col))) + geom_line() # plot data

这将输出以下内容:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接