2016-07-26 15 views
2

私はベイジアンモデリングを行い、8つの変数を持ちます。各変数には相関パラメータがあり、変数の各ペアには相関パラメータがあります。これらのパラメータはすべて事後密度プロットを持っています。私は上三角レイアウトでこれらのプロットを手配したい、と私は私がタイトル/プロットが何を散布と同じ方法でプロットにラベルを付けることができればしかし、それは良いだろう Upper triangle layout複数のプロットが上三角行列としてレイアウトされ、散布図としてフォーマットされます

からの結果を使用し、すなわち上と右にタイトル(変数名)があり、各サブ図の右上と右上の対応するタイトルをチェックすることで、相関パラメータが何を表しているのかが分かります。

これは私が達成した最小の例ですが、ここでは3つの変数を使って説明しました。

require(ggplot2) 
corr_1 = rnorm(100) 
corr_2 = rnorm(100) 
corr_12 = rnorm(100) 
corr_list = list(corr_1, corr_2, corr_12) 
ttls = c('variance within variable 1', 
     'correlation within variable 1 & 2', 
     'variance within variable 2') 
plots = list() 
for(i in 1:3){ 
    temp_df = data.frame(x=corr_list[[i]]) 
    temp = ggplot(data=temp_df, aes(x=x)) + 
    geom_density()+ 
    ggtitle(ttls[i]) 
    plots[[i]] = temp 
} 
library(gridExtra) ## for grid.arrange() 
library(grid) 
ng <- nullGrob() 
grid.arrange(plots[[1]], plots[[2]],   
      ng, plots[[3]]) 

enter image description here

それでは、私が欲しいの代わりに、明示的に相関関係は、プロットの上部にあるラベルを持つ、何を意味するのかを述べるのです。私は上に "variable1"と "variable2"というタイトルを付けるべきで、プロットの右側には散布図のように垂直に "variable1"と "variable2"というタイトルがあります。

私が持っているしたいのですが、最終的なレイアウトはこの1つのようになります。しかし enter image description here

、違いは、私のプロットであるすべての密度プロットをする非対角部分を必要とし、すべての密度プロットがありますつまり、データは他の変数に依存しません。最小の例では、独立したプロットがリストに格納されています(ペアごとの散布図では、各サブプロットは1つの変数をx、1つをyとして使用します)。

+1

、私はいくつかの詳細を追加しました。 –

答えて

1

私はあなたのプロットが適切に配置されていると仮定しており、必要なのは変数ラベルを追加することだけです。私はタイトルと軸のラベルを削除するためにプロット関数をいくつか変更しました。

arrangeGrobは、gtbableでもあるgrobを返します。したがって、gtable関数を適用してラベルを追加することができます。私は以下にいくつかのコメントを追加しました。ハック-R @

library(ggplot2) 
library(gridExtra) 
library(grid) 
library(gtable) 

corr_1 = rnorm(100) 
corr_2 = rnorm(100) 
corr_12 = rnorm(100) 
corr_list = list(corr_1, corr_2, corr_12) 
ttls = c('variance within variable 1', 
     'correlation within variable 1 & 2', 
     'variance within variable 2') 
plots = list() 
for(i in 1:3){ 
    temp_df = data.frame(x=corr_list[[i]]) 
    temp = ggplot(data=temp_df, aes(x=x)) + 
    geom_density() + 

    theme(axis.title = element_blank()) #+ 

    # ggtitle(ttls[i]) 
    plots[[i]] = temp 
} 

ng <- nullGrob() 
gp <- arrangeGrob(plots[[1]], plots[[2]],   
      ng, plots[[3]]) 

# The gp object is a gtable; 
# thus gtable functions can be applied to add the the necessary labels 

# A list of text grobs - the labels 
vars <- list(textGrob("Variable 1"), textGrob("Variable 2")) 

# So that there is space for the labels, 
# add a row to the top of the gtable, 
# and a column to the left of the gtable. 
gp <- gtable_add_cols(gp, unit(1.5, "lines"), 0) 
gp <- gtable_add_rows(gp, unit(1.5, "lines"), 0) 

# Add the label grobs. 
# The labels on the left should be rotated; hence the edit. 
# t and l refer to cells in the gtable layout. 
# gtable_show_layout(gp) shows the layout. 
gp <- gtable_add_grob(gp, lapply(vars, editGrob, rot = 90), t = 2:3, l = 1) 
gp <- gtable_add_grob(gp, vars, t = 1, l = 2:3) 

# Draw it 
grid.newpage() 
grid.draw(gp) 

enter image description here

+0

答えをありがとう、これは本当に私がgridExtraを理解するのを助けました。 –

関連する問題