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 に答える