2016-06-30 4 views
1

グリッドを作って、各セルの間に線を引いた。 セルの左上隅にテキストが必要ですが、セルの中心を基準にしてのみ配置できます。グリッドの端にテキストを合わせるR

私は多くの時間を費やして検索しましたが、これは私が見つけた最も近いものですWhat do hjust and vjust do when making a plot using ggplot?です。 hjustとvjustの[0,1]の値は、この例ではポイントを参照してテキストを整列し、グリッド(grid.textを使用)ではセルの中心を基準としてテキストを整列させます。私は運がない[0,1]の外でhvjustの値を試しました。私は、テキストの配置の行/列を指定するときに小数点以下桁数を使用しようとしましたが(1.5行は1行目と2行目の間にあるはずです)、小数点は丸められます。私のスクリプトは可変長の多くの名前を整列させる必要があるので、手で整列することはできません。

コードは、グリッドをレイアウトに:

grid.newpage() 
pushViewport(viewport(layout=grid.layout(29+1,7, heights = unit(rep(1, 
    (29+1), "null"), widths=unit(c(1,.5,.5,.5,1,1,1), "null")))) 
grid.polyline(x=c(0,0,1,1,1.5,1.5,2,2,2.5,2.5,3.5,3.5,4.5,4.5,5.5,5.5)/5.5, y=rep(c(0,1), 8), id.lengths=rep(2,8)) 
grid.polyline(x=rep(c(0,1), 29+2), y=sort(rep(0:(29+1), 2)/(29+1)), id.lengths=rep(2,29+2)) 

は、29Sは、変数の数であると仮定し、私はより具体的なものからそれらを変更しなければなりませんでした。コードでグリッドがレイアウトされていない場合は、余分なカッコが削除されているはずです。私が持っている唯一の他のコードは、グリッドのセルの中央付近にテキストを配置しています。

私の目標は、最初の文字がグリッド線の左上隅にあるようにテキストを配置することです。どんな指針も大変ありがとうございます。

答えて

0

gtableを使用する方が簡単な場合があります。その場合、各ラベルはそれぞれのセルの中央に配置できます。そうでなければ、あなたの戦略では、すべてのxとyの位置を追跡する必要があります(または、個々のビューポートを定義しますが、基本的にグリッドの上にどのようなgtableがありますか)。

ここでは使用しませんので、この戦略は、しかし、非常に非効率的であることに注意してくださいは、(私は便宜上gtableを設定するためにtableGrobを使用)の例です

library(gtable) 
library(gridExtra) 
g <- tableGrob(matrix("", 29+1, 7), theme = ttheme_minimal()) 
g$widths <- unit(c(1,.5,.5,.5,1,1,1), "null") 
g$heights <- unit(rep(1, (29+1)), "null") 
vs <- replicate(ncol(g)-1, 
         segmentsGrob(x1 = unit(0, "npc"), gp=gpar(lwd=0.5)), 
         simplify=FALSE) 
hs <- replicate(nrow(g)-1, 
         segmentsGrob(y1 = unit(0, "npc"), gp=gpar(lwd=0.5)), 
         simplify=FALSE) 
g <- gtable::gtable_add_grob(g, grobs = vs, 
          t = 1, b = nrow(g), l = seq_len(ncol(g)-1)+1) 
g <- gtable::gtable_add_grob(g, grobs = hs, 
          l = 1, r = ncol(g), t = seq_len(nrow(g)-1)) 
labels <- list(textGrob("l", hjust=0, x=0), 
       textGrob("c", hjust=0.5, x=0.5), 
       textGrob("r", hjust=1, x=1)) 
g <- gtable_add_grob(g, labels, t=c(1,2,3), l=c(2, 4, 7), z = -1) 
grid.newpage() 
grid.draw(g) 

enter image description here

ベクトル化されたgrobs(代わりに個々のgrobsが配置されます)。十分な小さなテーブルの場合、それは重要ではないかもしれません。利便性の向上は価値があります。 gtable処理のその他の例については、this wiki pageを参照してください。

関連する問題