我尝试在单个图中绘制多条线,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
然而,似乎qplot
会解析m
过程中plot(m)
,其中i
的10
,所以plot(m)
只生产单一的线.
我期望看到的类似于:
plot(1,1,type='n', ylim=range(y), xlim=c(1,10))
for(i in 1:10) {
lines(1:10, y[,i])
}
Run Code Online (Sandbox Code Playgroud)
其中应包含10个不同的行.
有ggplot2
办法做到这一点吗?
EDi*_*EDi 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))
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这输出: