7

我尝试在单个图中绘制多条线,如下所示:

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)

但是,似乎会在where is期间qplot解析,因此仅生成单行。mplot(m)i10plot(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办法做到这一点?

4

2 回答 2

10

您应该以 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))

在此处输入图像描述

于 2013-02-05T10:14:47.290 回答
7

EDi提出的方式是最好的方式。如果您仍想使用for循环,则需要使用 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

这输出:

在此处输入图像描述

于 2013-02-05T10:55:36.113 回答