2013-08-24 41 views
9

gridExtraパッケージのtableGrob/grid.tableに関する質問があります。通常のパラメータ設定を使用すると、代替の行を色付けするのが簡単です。しかし、私は、行の色付けを少しずつ制御することが可能であることを期待していました。gridExtra tableGrobで異なる色を表示

例えば、の3番目の行を異なる色で塗りつぶすことは可能ですか? grid.edit関数は、このリンクの例で判断すると、これにアプローチする方法の1つと考えられます:http://code.google.com/p/gridextra/wiki/tableGrobしかし、私はそれを私の質問にどのように適用するかを理解できません。

この質問を投稿した人は、同じことを念頭に置いていると思います。 Table with rows of different colors with tableGrob

私は現在、互換性の問題でR 2.13に固執しています。したがって、それ以降のバージョンには関係しない理想があれば理想的です。

例コード:V始まる

library(gridExtra) 

grid.table(mtcars[1:10, ], 
      gpar.coretext = gpar(fontsize = 10), 
      gpar.corefill = gpar(fill = "lightblue", alpha=0.5, col = NA), 
      h.even.alpha = 0.5 
      ) 

example table

+2

スタックオーバーフローへようこそ、よくあなたがあなた自身にいくつかの作業を行ってきたことを示すために、独自の他の質問を参照するために行われ、テーブルの構築時にパラメータを指定します。今後の質問では、あなた自身のデータを使って[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) '偽の'データや、 'mtcars'データセットのような組み込み関数です。他の人がコピー、貼り付け、実験できるようにするには、シンプルで実際には最小限のものがベストです(自分のものを追加しました)。 – SlowLearner

答えて

8

> = gridExtra、grid.tableの2.0.0は、現在gtableに基づいており、以前のバージョンよりも深いレベルに合わせてカスタマイズすることができます。 vignette has more examplesが、ここでは完全を期すために、特定のセルを強調表示する方法を示す一例であり、

g <- tableGrob(iris[1:4, 1:3]) 
find_cell <- function(table, row, col, name="core-fg"){ 
    l <- table$layout 
    which(l$t==row & l$l==col & l$name==name) 
} 

ind <- find_cell(g, 3, 2, "core-fg") 
ind2 <- find_cell(g, 2, 3, "core-bg") 
g$grobs[ind][[1]][["gp"]] <- gpar(fontsize=15, fontface="bold") 
g$grobs[ind2][[1]][["gp"]] <- gpar(fill="darkolivegreen1", col = "darkolivegreen4", lwd=5) 
grid.draw(g) 

編集:上記の機能は簡単では

find_cells <- function(table, row, col, name="core-fg"){ 
    l <- table$layout 
    unlist(Map(function(r, c) which(((l$t-1) == r) & ((l$l-1) == c) & (l$name == name)), row, col)) 
} 

modify_cells <- function(g, ids, gp=gpar()){ 
    for(id in ids) g$grobs[id][[1]][["gp"]] <- gp 
    return(g) 
} 

ids <- find_cells(g, 1:3, c(3,2, 1), "core-fg") 
g <- modify_cells(g, ids, gpar(fontsize=15, fontface="bold")) 

grid.newpage() 
grid.draw(g) 

enter image description here

を "ベクトル化"

ほとんどの場合、 NSEは

faces <- sample(1:4, size = prod(dim(iris[1:4, 1:2])), replace = TRUE) 
tt <- ttheme_default(core=list(fg_params=list(fontface=faces))) 

grid.table(iris[1:4, 1:2], theme=tt) 

enter image description here

+0

誰かがまだここで聞いているかどうかわかりませんが、とにかく試してみます:find_cell関数を微調整して、一度に1つではなく複数の異なるセルを見つけることが可能ですか?例えば、すべてのSepal.Length> 4.8は太字で書かれています。私は統計的有意性テストでtableGrobを持っており、すべてのpvaluesを太字で<0.05にする必要があります。これを手動で各セルに対して行うのではなく、1つの機能でこれを行うとよいでしょう。ありがとう – PaoloCrosetto

+0

名前 "core-fg"とは何ですか? – user2946746

+0

テーブルは、列ヘッダー、行ヘッダー、コアセル(本体)の3つの部分に分かれています。 (コアの場合は灰色、列見出しの場合は灰色)、テキストの前景(「fg」)が表示されます。 – baptiste

関連する問題