2017-12-15 9 views
0

Rパッケージ:cowplot/ggplot2Cowplot:マージンプロットに目盛りと対応するデータラベルを追加するにはどうすればよいですか?

使用事例:マージナルヒストグラムと散布図。

問題:ヒストグラムの場合、x軸にビンサイズを追加したり、下位/上位の参照を のクラス間隔で参照することはできません。これらのヒストグラムがなければ、読むのは難しいです。

cowplotでは、必要に応じて目盛りと対応するデータを(x軸の)ラベルに余白を追加する方法はありますか?例えば。マージナルプロットで ヒストグラムのため

cowplot

require(ggplot2) 
require(cowplot) 

メインプロットを使用して基本的な散布+限界ヒストグラムプロット:

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy)) + 
    geom_point() + 
    xlab("City driving") + 
    ylab("Highway driving") + 
    theme_grey() 

限界プロット:

xbox <- axis_canvas(pmain, axis = "x") + 
    geom_histogram(
    data = mpg, 
    aes(x = cty), 
    colour = "black" 
) 

組み合わせプロット:

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

ggdraw(p1) 

Output-1

しかし、私はx軸マージナルプロットとして表示されるように、次のプロットxbox2をしたいと思います:

xbox2.1 <- ggplot() + 
    geom_histogram(
    data = mpg, 
    aes(x = cty), 
    colour = "black" 
) 
hist_tab <- ggplot_build(xbox2.1)$data[[1]] 

xbox2 <- xbox2.1 + 
    scale_x_continuous(
    breaks = c(round(hist_tab$xmin,1), 
       round(hist_tab$xmax[length(hist_tab$xmax)],1)) 
) + 
    labs(x = NULL, y = NULL) + 
    theme(
    axis.text.x = element_text(angle = 90, size=7,vjust=0.5), 
    axis.line = element_blank(), 
    axis.text.y=element_blank(), 
    axis.ticks.y=element_blank() 
) 

xbox2 

Output-2

しかし、私は作成することはできません。散布+限界ヒストグラム(xbox2)。私は最初のものと同じプロットを得る:

p2 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.5, "in"), position = "top") 
ggdraw(p2) 

Output-3

+0

私はこの質問を再開して投票。 OPはこれを編集しましたが、今は最小で完全で検証可能な例が含まれています。 –

答えて

2

ここではパッケージの作者。あなたが目にしているのは、文書化された動作です。 grob引数のドキュメントからinsert_xaxis_grob()

挿入するGrob。これは、一般に、ggplot2オブジェクトからget_panel()、特にaxis_canvas()で生成されたオブジェクトによって取得されます。 grobの代わりにggplot2プロットが提供されている場合は、get_panel()が呼び出されてパネルgrobが抽出されます。

この関数は、プロットを積み重ねるためのものではありません。あなたは全体のプロットをgrobに変えて、この関数を使って挿入することができますが、それが意味をなさないかどうかはわかりません。あなたがしようとしているのは、同じx軸の範囲で2つのプロットを積み重ねるのと同じです。私はそれを明示的にコーディングする方が良いと思います。

library(cowplot) 

xlimits <- c(6, 38) 

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy)) + 
    geom_point() + 
    xlab("City driving") + 
    ylab("Highway driving") + 
    scale_x_continuous(limits = xlimits, expand = c(0, 0)) + 
    theme_grey() + 
    theme(plot.margin = margin(0, 5.5, 5.5, 5.5)) 


xhist <- ggplot() + 
    geom_histogram(
    data = mpg, 
    aes(x = cty), 
    colour = "black", 
    binwidth = 1, 
    center = 10 
) + 
    scale_x_continuous(limits = xlimits, expand = c(0, 0), breaks = 8:35) + 
    labs(x = NULL, y = NULL) + 
    theme(
    axis.text.x = element_text(angle = 90, size=7, vjust=0.5), 
    axis.line = element_blank(), 
    axis.text.y = element_blank(), 
    axis.ticks.y = element_blank(), 
    plot.margin = margin(5.5, 5.5, 0, 5.5) 
) 

plot_grid(xhist, pmain, ncol = 1, align = "v", rel_heights = c(0.2, 1)) 

enter image description here

関連する問題