2017-11-28 1 views
2

コメントにはthis post:が出ました関数を使ってマージナルプロットを作成すると、メインプロットと余裕のプロット?cowplotでaxis_canvasを使ったマージナルプロット:メインパネルとマージンプロットの間にギャップを挿入する方法

例コード:我々は、この例でわかるように

require(cowplot) 

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy, color = factor(cyl))) + 
    geom_point() + 
    xlab("City driving (miles/gallon)") + 
    ylab("Highway driving (miles/gallon)") + 
    theme_minimal() 

xbox <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) + 
    geom_boxplot(data = mpg, aes(y = cty, x = factor(cyl), color = factor(cyl))) + 
    scale_x_discrete() + coord_flip() 
ybox <- axis_canvas(pmain, axis = "y") + 
    geom_boxplot(data = mpg, aes(y = hwy, x = factor(cyl), color = factor(cyl))) + 
    scale_x_discrete() 

p1 <- insert_xaxis_grob(pmain, xbox, grid::unit(0.6, "in"), position = "top") 
p2 <- insert_yaxis_grob(p1, ybox, grid::unit(0.6, "in"), position = "right") 
ggdraw(p2) 

enter image description here

、マージナルボックスプロットは、直接メインプロットタッチパネル。目標はいくらかのギャップを生み出すことです。これはどうすればできますか?私たちは、空にすることができます一つは、複数のgrobsを挿入するために繰り返しinsert_xaxis_grob()/insert_yaxis_grob()機能を適用することができます

を挿入し、空のプロット

答えて

2

は、私は2つのオプションを参照してください。このようにして、限界線の両側に指定量のスペースを挿入することができます。ここで私は、メインパネルと限界のプロットの間のギャップを生成するために、内側にこれを行う方法を示しています:

# pmain, xbox, ybox are defined as in the question 
pnull <- ggdraw() # generate empty plot 

p1 <- insert_xaxis_grob(
     insert_xaxis_grob(pmain, xbox, grid::unit(0.6, "in"), position = "top"), 
     pnull, grid::unit(0.2, "in"), position = "top") 

p2 <- insert_yaxis_grob(
     insert_yaxis_grob(p1, ybox, grid::unit(0.6, "in"), position = "right"), 
     pnull, grid::unit(0.2, "in"), position = "right") 
ggdraw(p2) 

enter image description here

マージナルプロット

のギャップを作成します。代わりに、限界プロットはggplot2で描画されるので、適切な場所にスペースを生成する軸の制限を指定することができます。

xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) + 
    geom_boxplot(data = mpg, aes(y = cty, x = as.numeric(factor(cyl)), color = factor(cyl))) + 
    scale_x_continuous(limits = c(-2, 4.5)) + coord_flip() 
ybox2 <- axis_canvas(pmain, axis = "y") + 
    geom_boxplot(data = mpg, aes(y = hwy, x = as.numeric(factor(cyl)), color = factor(cyl))) + 
    scale_x_continuous(limits = c(-2, 4.5)) 

p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.8, "in"), position = "top") 
p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.8, "in"), position = "right") 
ggdraw(p2) 

enter image description here

ここで何が起こっているのかを理解するために、サイドでxboxxbox2側を比較してみましょう:すなわち、代わりに元のコードでxboxyboxの、私たちは経由xbox2定義し、ybox2

plot_grid(xbox + panel_border("black"), 
      xbox2 + panel_border("black"), nrow = 1, scale = 0.9) 

enter image description here

xbox2(右)には、最初のボックスプロットが位置1にあるにもかかわらず、-2で軸を開始して作成された、下部に余分なスペースがどのようにあるかがわかります。軸の範囲の選択方法これらの周辺プロットは、here.

関連する問題