2016-05-04 6 views
4

とファセットグリッドプロットを生成する:ggplot:私はデータフレームを、次ている複数の直列

Quarter  x  y   p   q 
1 2001 8.714392 8.714621 3.3648435 3.3140090 
2 2002 8.671171 8.671064 0.9282508 0.9034387 
3 2003 8.688478 8.697413 6.2295996 8.4379698 
4 2004 8.685339 8.686349 3.7520135 3.5278024 

私の目標は、ファセットとpにおける1つのプロットのxとyの列ファセットプロットを生成することで、Q一緒に4つのファセットの代わりに別のプロット。

することは、私は次のような場合:P、Qは、一緒に他にあるとしながら、

x.df.melt <- melt(x.df[,c('Quarter','x','y','p','q')],id.vars=1) 
ggplot(x.df.melt, aes(Quarter, value, col=variable, group=1)) + geom_line()+ 
    facet_grid(variable~., scale='free_y') + 
    scale_color_discrete(breaks=c('x','y','p','q')) 

はIすべての4つの4つの異なる面でのシリーズが、どのように私はXを組み合わせ、yは1であることを。好ましい伝説はありません。

enter image description here

答えて

2

ひとつのアイデアは、新しいグループ化変数を作成するには、次のようになります。

x.df.melt$var <- ifelse(x.df.melt$variable == "x" | x.df.melt$variable == "y", "A", "B") 

グループ化variableを使用しているときは、面取りのためにそれを使用することができます。

ggplot(x.df.melt, aes(Quarter, value, col=variable, group=variable)) + geom_line()+ 
    facet_grid(var~., scale='free_y') + 
    scale_color_discrete(breaks=c('x','y','p','q'), guide = F) 

enter image description here

+0

新しい変数が溶けたdata.frameに追加されますか? –

+0

よろしくお願いいたします –

0

私はビートルート '上記の答えはよりエレガントですが、私は同じ問題に取り組んでいて、同じ場所に別の方法で到着しました。私はx、y/p、qのペアを整列させるために "二重溶融"(yum!)を使用したので興味深いと思います。また、溶融物の代わりにtidyr::gatherを示しています。

library(tidyr) 
x.df<- data.frame(Year=2001:2004, 
        x=runif(4,8,9),y=runif(4,8,9), 
        p=runif(4,3,9),q=runif(4,3,9)) 


x.df.melt<-gather(x.df,"item","item_val",-Year,-p,-q) %>% 
    group_by(item,Year) %>% 
    gather("comparison","comp_val",-Year,-item,-item_val) %>% 
    filter((item=="x" & comparison=="p")|(item=="y" & comparison=="q")) 

> x.df.melt 
# A tibble: 8 x 5 
# Groups: item, Year [8] 
    Year item item_val comparison comp_val 
    <int> <chr> <dbl>  <chr> <dbl> 
1 2001  x 8.400538   p 5.540549 
2 2002  x 8.169680   p 5.750010 
3 2003  x 8.065042   p 8.821890 
4 2004  x 8.311194   p 7.714197 
5 2001  y 8.449290   q 5.471225 
6 2002  y 8.266304   q 7.014389 
7 2003  y 8.146879   q 7.298253 
8 2004  y 8.960238   q 5.342702 

プロット文については以下を参照してください。

このアプローチの弱点(およびビートルートのifelseの使用)は、比較対象のペアが多数ある場合、filterステートメントがすぐに扱いにくくなります。私の使用事例では、私はミューチュアルファンドのパフォーマンスをいくつかのベンチマーク指数と比較していました。各ファンドは異なるベンチマークを持っています。私は、ファンドのティッカーをそれぞれのベンチマークとペアにして、left/right_joinを使用するメタデータのテーブルを使ってこれを解決しました。この場合:

#create meta data 
pair_data<-data.frame(item=c("x","y"),comparison=c("p","q")) 

#create comparison name for each item name 
x.df.melt2<-x.df %>% gather("item","item_val",-Year) %>% 
    left_join(pair_data) 

#join comparison data alongside item data 
x.df.melt2<-x.df.melt2 %>% 
    select(Year,item,item_val) %>% 
    rename(comparison=item,comp_val=item_val) %>% 
    right_join(x.df.melt2,by=c("Year","comparison")) %>% 
    na.omit() %>% 
    group_by(item,Year) 

ggplot(x.df.melt2,aes(Year,item_val,color="item"))+geom_line()+ 
    geom_line(aes(y=comp_val,color="comp"))+ 
    guides(col = guide_legend(title = NULL))+ 
    ylab("Value")+ 
    facet_grid(~item) 

enter image description here

我々はファセットプロットのラベルとして参照item秒の名前を保持する新しいグループ化変数の必要がないので。