を、プロットのgrobsの名前を持っていますかわった。
library(ggplot2)
library(grid)
d <- data.frame('factor_1' = factor(c('a', 'a', 'b')),
'factor_2' = factor(c('1', '2', '1')),
x = 1:3, y = 1:3)
p = ggplot(data = d, mapping = aes(x = x, y = y)) +
geom_point() +
facet_grid(facets = factor_1 ~ factor_2, drop = TRUE)
# Get ggplot grob
g = ggplotGrob(p)
# Get the layout dataframe.
# Note the names.
# You want to remove "panel-2-2"
g$layout
# gtable::gtable_show_layout(g) # Might also be useful
# Remove the grobs
# The grob needs to be remove,
# and the relevant row in the layout data frame needs to be removed
pos <- grepl(pattern = "panel-2-2", g$layout$name)
g$grobs <- g$grobs[!pos]
g$layout <- g$layout[!pos, ]
# Alternatively, replace the grobs with the nullGrob
g = ggplotGrob(p)
pos <- grep(pattern = "panel-2-2", g$layout$name)
g$grobs[[pos]] <- nullGrob()
# If you want, move the axis
# g$layout[g$layout$name == "axis-b-2", c("t", "b")] = c(8, 8)
# Draw the plot
grid.newpage()
grid.draw(g)
あなたのリンクでの答えは、このようなものに変更する必要があります:私は、私は間違いなく `facet_grid`なく` facet_wrap`を使用する必要が怖い
n <- 1000
df <- data.frame(x = runif(n), y=rnorm(n), label = sample(letters[1:7],
size = n, replace = TRUE), stringsAsFactors=TRUE)
df$label.new <- factor(df$label, levels=sort(c(""," ",levels(df$label))))
p <- ggplot(df, aes(x=x, y=y)) + geom_point() +
facet_wrap(~ label.new, ncol=3,drop=FALSE)
g = ggplotGrob(p)
g$layout # Note the names and their positions (t, b, l, r)
# gtable::gtable_show_layout(g) # Might also be useful
pos <- g$layout$name %in% c("panel-1-1", "panel-1-2", "strip-t-1-1", "strip-t-2-1")
g$grobs <- g$grobs[!pos]
g$layout <- g$layout[!pos, ]
# Or replace the grobs with the nullGrob
g = ggplotGrob(p)
pos <- g$layout$name %in% c("panel-1-1", "panel-1-2", "strip-t-1-1", "strip-t-2-1")
g$grobs[pos] <- list(nullGrob())
# Move the axis
g$layout[g$layout$name == "axis-l-1-1", c("l", "r")] = c(10,10)
grid.newpage()
grid.draw(g)
これはすばらしい答えであり、私には大いに役立ちます。しかし、私の非おもちゃの問題にそれを適用すると、(i)パネルの名前( "panel-5-3"など)がプロット内のパネルの座標を参照していないように見えること、しかし、少なくとも、それらは 'panel $ layout'の中でコラムメジャーであり、(ii)軸/ストリップの位置を調整するとき(名前が単純なところでは)、位置情報(t )、b(ottom)、r(ight)、l(eft))は、実際には 'panel $ layout'に含まれています。あなたはそれを説明したり、それに関する有用な情報を教えてもらえますか?とにかく、ありがとうございました。 – NoBackingDown
(i)t(op)、b(ottom)、r(ight)、l(eft)は、基礎となるgtableに対するgrobの範囲を指定します。 'gtable_show_layout()'を使って基礎となるgtableのイメージを取得します。レイアウトデータフレームの '名前'列に与えられたgrobsの名前にある数字は、t、l、b、rではありません。 v2.2.0では、「panel-5-3」は「5 panel down、3 panels across」を意味します。ストリップの場合、最初の数字が横になり、2番目の数字が下になります。 'gtable_show_layout()'やレイアウトデータフレームを使ってgrobsをgrob名とtlbrにマッチさせます。 –
(ii) 'gtable_show_layout()'では、軸を取り付けるパネルの行(tとb)に注意してください。あなたの例では、それは行7です。軸は1行、すなわち行8に配置されます。したがって、tとbは両方とも8です。列番号(rとl)は変更されません。お役に立てれば。 –