2016-02-22 19 views
5

各データセットの線グラフとfacet_wrapをプロットしようとしています。私が持っていたいのは、明るい灰色、透明、または何か、バックグラウンドのすべてのデータセットです。facet_wrapとggplot2を使用して各ファセット内のデータ全体をプロットする

df <- data.frame(id=rep(letters[1:5], each=10), 
       x=seq(10), 
       y=runif(50)) 

ggplot(df, aes(x,y, group=id)) + 
    geom_line() + 
    facet_wrap(~ id) 

enter image description here

このグラフは、私が得るどのくらいですが、私は同様に、各グラフ内の他のすべての不足している4行...私はfacet_wrapを使用しようとするどのような方法でを持っているのが大好きだ、I 1行のデータだけを取得する。

私が期待していることは、各面ごとにこのようなものです。ここで

ggplot(df, aes(x,y, group=id)) + 
    geom_line() + 
    geom_line(data=df[1:10,], aes(x,y, group=id), size=5) 

enter image description here

答えて

9

ここでは別のアプローチです:次に、元のid列なしでDFに基づいて別のgeom_lineを追加

df$id2 <- df$id 

まずIDと同一の新しい列を追加します。

ggplot(df, aes(x,y, group=id)) + 
    geom_line(data=df[,2:4], aes(x=x, y=y, group=id2), colour="grey") + 
    geom_line() + 
    facet_wrap(~ id) 

enter image description here

+0

これは素晴らしいです!私は本当にこのように新しいデータをgeomに追加することについては考えていませんでした。そして、すべての観測についてすべての情報を1行にしすぎました。 – Heroka

+0

私はこのソリューションが@Heroka以上のものも好きです。私はまだそれがうまく機能する分を考える必要がありますが、これは私の問題を簡単に解決すると思う... – drmariod

+0

ありがとう:)私は確かにここで働く均等に創造的な方法がたくさんあると確信しています。 – beetroot

3

アプローチです。 number_of_facets回のデータを複製するので、大きなデータセットには適していない可能性があります。

まず、このデータフレームを作成するために、いくつかのデータを取り上げます。 DF $ obs_id <から1:各観測

#new data with unique ID's and 'true' facets 
df2 <- expand.grid(true_facet=unique(df$id), obs_id=1:nrow(df)) 

#merge them 
dat <- merge(df,df2,by="obs_id",all=T) 

ためnrow(DF)#unique IDはその後、私たちは '真' ファセットの変数を定義するフラグを作成し、フォアグラウンドからバックグラウンドを識別します。

dat$col_flag <- dat$true_facet == dat$id 

ここでプロットは簡単です。 Geom_lineをスケールの代わりに2回使用しました。これは、順序を修正しようとするよりも簡単だったので(黒が灰色の下にプロットされるようになります)。

p1 <- ggplot(dat, aes(x=x,y=y, group=id))+ 
    geom_line(color="grey")+ 
    geom_line(dat=dat[dat$col_flag,],size=2,color="black")+ 
    facet_wrap(~true_facet) 

enter image description here

関連する問題