2

ggplot に 2 つのプロットがあり、軸上に同様の範囲があり、それらを整列させたいと考えています。

使用:

library(grid)
grid.newpage()
grid.draw(rbind(ggplotGrob(g1), ggplotGrob(g2), size = "last"))

ここでsize='last'、グリッドが x に対して整列されるようにすると、次のようなレイアウトが得られます。

ここに画像の説明を入力

一番上のグラフは、私が描写したい単純な行に対して過度の垂直範囲を持っています.

私は、次のようなイメージをもっと持ちたいと思っています。

ここに画像の説明を入力

または、g1 チャートを g2 チャートの軸の下に配置します。(一般性のために、どちらかを選択できるようにしたい、または g1 を g2 の上に重ねることさえできるようにしたいとしましょう。

(私の元のモデルは、g1 コンポーネントが y=0 の g2 チャートのレイヤーとして単純に設定された単一のチャートでしたが、そのレイアウトではチャートが雑然として読めないため、元の y=0 を移動する必要があると考えました。要素を別のパネル (つまり g1) に追加します。

最小限の例:

size=50
df1=data.frame(x=seq(1,size),y=sample(-100:100,size,rep=TRUE))
df2=data.frame(x=seq(1,size),r=replicate(size,paste(sample(c(letters, LETTERS),3),collapse='')))
g1=ggplot(df1)+geom_point(aes(x=x,y=y))
g2=ggplot(df2)+geom_text(aes(x=x,y=0,label=r),angle=45,size=2)
library(grid) 
grid.newpage()
grid.draw(rbind(ggplotGrob(g1), ggplotGrob(g2), size = "last"))

散布図に対してラベル ストリップ (g2) をきれいに配置したいと考えています。g2 ストリップはgeom_text()要素として元のチャートの一部でしたy=0が、ラベルがそこに配置されているため、チャートはあまりにも散らかっていました。

4

1 に答える 1

4

gtable の高さを編集するだけです。

library(ggplot2)
library(grid)
g1 <- g2 <- ggplotGrob(qplot(1,1))

g <- rbind(g1,g2,size="last")
id <- g$layout$t[g$layout$name == "panel"]
g$heights[id] <- lapply(c(1,4), "unit", "null")
grid.newpage()
grid.draw(g)

編集:より具体的な指示で、別の戦略をお勧めします:最初のパネルを2番目のプロットのgtableにのみ追加し、

p1 <- ggplot(df1)+geom_point(aes(x=x,y=y))
p2 <- ggplot(df2)+geom_text(aes(x=x,y=0,label=r),angle=45,size=2)
snug <- theme_bw() + theme(plot.margin=unit(c(0.5,0.5,0,0),"line"))

library(gtable)
g1=gtable_filter(ggplotGrob(p1 + snug), pattern = "panel", trim = TRUE, fixed=TRUE)
g2=ggplotGrob(p2 + snug)

g <- g2
g <- gtable_add_rows(g, unit(0.2, "null"), 0)
g <- gtable_add_grob(g, g1, 1, 4)
grid.newpage()
grid.draw(g)

ここに画像の説明を入力

于 2015-01-31T21:18:01.310 に答える