2013-02-05 92 views
4

我嘗試繪製在同一張圖多條線路如下:使用for循環繪製在同一張圖多行與GGPLOT2

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) 

然而,似乎qplot將在plot(m)解析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這樣做?

回答

9

而不是ruuning一個循環,你應該這樣做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)) 

enter image description here

5

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 

此輸出:

enter image description here