80

サンプル サイズの値をプロット上の点に関連付けたいと思います。geom_textポイントの近くに数字を配置するために使用できますが、これは面倒です。それらをプロットの外側の端に沿って並べると、はるかにきれいになります。

たとえば、私は持っています:

df=data.frame(y=c("cat1","cat2","cat3"),x=c(12,10,14),n=c(5,15,20))

ggplot(df,aes(x=x,y=y,label=n))+geom_point()+geom_text(size=8,hjust=-0.5)

このプロットを生成するもの: ここに画像の説明を入力

私はこのようなものをもっと好むでしょう: ここに画像の説明を入力

2 番目のプロットを作成して使用できることはわかっていますがgrid.arrange(この投稿のように)、y 軸に合わせて textGrobs の間隔を決定するのは面倒です。これを行う簡単な方法はありますか?ありがとう!

4

3 に答える 3

63

2 番目のプロットを描画する必要はありません。を使用annotation_customして、プロット領域の内側または外側のどこにでもグロブを配置できます。グロブの位置は、データ座標に基づいています。「5」、「10」、「15」が「cat1」、「cat2」、「cat3」と整列すると仮定すると、textGrobs の垂直位置が処理されます。3 つの textGrobs の y 座標は、 3 つのデータ ポイントの y 座標。デフォルトでggplot2は、クリッピングはプロット エリアにグロブしますが、クリッピングはオーバーライドできます。グロブの余地を作るために、関連するマージンを広げる必要があります。以下(ggplot2 0.9.2を使用)は、2番目のプロットに似たプロットを提供します:

library (ggplot2)
library(grid)

df=data.frame(y=c("cat1","cat2","cat3"),x=c(12,10,14),n=c(5,15,20))

p <- ggplot(df, aes(x,y)) + geom_point() +            # Base plot
     theme(plot.margin = unit(c(1,3,1,1), "lines"))   # Make room for the grob

for (i in 1:length(df$n))  {
p <- p + annotation_custom(
      grob = textGrob(label = df$n[i], hjust = 0, gp = gpar(cex = 1.5)),
      ymin = df$y[i],      # Vertical position of the textGrob
      ymax = df$y[i],
      xmin = 14.3,         # Note: The grobs are positioned outside the plot area
      xmax = 14.3)
 }    

# Code to override clipping
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

ここに画像の説明を入力

于 2012-09-14T02:48:49.323 に答える