3

グリッドテーブルを生成し、テキストの書式設定を行うこのリンクを見ていました。条件付き書式を設定する方法はありますか? 例えば

  1. 値に基づいて背景色を設定する
  2. 負の値を赤で表示し、それ以外の場合は青で表示します

source("http://gridextra.googlecode.com/svn/trunk/inst/tableGrob2.r")
library(grid)

tc  = textConnection("
 carat   VeryLongWordIndeed color clarity depth
14513  1.35 Ideal     J     VS2  61.4
28685  0.30  Good     G    VVS1  64.0
50368  0.75 Ideal     F     SI2  59.2")
d = read.table(tc,head=T)
close(tc)
grid.newpage()
g = grid.table2(d)
grid.gedit(paste("cells-fill-",1,2,sep=""), gp=gpar(fill="red"))

これは期待どおりに機能します。ただし、10 行を超える場合はそうではありません。複数のセルに色を付けます。例えば

d<-do.call("rbind", replicate(10, d, simplify = FALSE))
grid.newpage()
g = grid.table2(d)
grid.gedit(paste("cells-fill-",1,2,sep=""), gp=gpar(fill="red"))

これを回避する方法は?

4

5 に答える 5

3

以前のバージョンの grid.table には方法がありました。残念ながら、それ以降の機能の一部とは互換性がありません。コードのコピーを に配置しましたinst/tableGrob2.r。あなたが試すことができます、

library(grid)

 tc  = textConnection("
     carat   VeryLongWordIndeed color clarity depth
 14513  1.35 Ideal     J     VS2  61.4
 28685  0.30  Good     G    VVS1  64.0
 50368  0.75 Ideal     F     SI2  59.2")
 d = read.table(tc,head=T)
 close(tc)
 grid.newpage()
 g = grid.table2(d)
 grid.ls(g)
 grid.gedit("top-head-fill-(1|3|5)", gp=gpar(fill="red"))
 grid.gedit("cells-fill-.3", gp=gpar(fill="green"))
 grid.edit("cells-label-33", label=expression(alpha),gp=gpar(col="orange"))
于 2012-08-03T20:39:36.437 に答える
1

@baptiste、テーブルセル gpar を直接変更してカスタマイズできないのはなぜですか。「tableGrob」によって生成された構造は、これらを個別に格納するようです。例えば:

exTable <- tableGrob(head(iris))
exTable$lg$lgt[[42]]$gp

構造体がセル番号 42 の 'col' と 'cex' の値を格納していることを示していますが、これらは直接変更されています。

exTable$lg$lgt[[42]]$gp$col <- "red"

出力への影響はないようです。

grid.draw(exTable)
于 2012-09-04T21:08:57.070 に答える
1

@baptiste が行と列を交換した可能性があると思います。ここでは、2 番目の行、1 番目の列を 2 に設定し、テストを作成して、塗りつぶしパラメーターを変更します。行の値を 2 番目に配置する必要があります。

tc  = textConnection("
     carat   VeryLongWordIndeed color clarity depth
 14513  1.35 Ideal     J     VS2  61.4
 28685  2  Good     G    VVS1  64.0
 50368  0.75 Ideal     F     SI2  59.2")
 d = read.table(tc,head=T)
 close(tc)
 grid.newpage()
 g = grid.table2(d)
 grid.ls(g)
 grid.gedit("top-head-fill-(1|3|5)", gp=gpar(fill="red"))
 rc = which(d==2, arr.ind=TRUE); loc <- paste("cells-label-", rc[2], rc[1], sep="")
 rc; loc
#      row col
#28685   2   1
#[1] "cells-label-12"
 grid.edit(loc, label=expression(alpha), gp=gpar(col="orange"))

「オレンジ」色は、2 行目の 1 列目に表示されます。カラー パレットの作成を含む、より適切な例を指定する必要がある場合があります。

于 2012-08-04T08:22:16.247 に答える
0

このページtableGrob2のコードを使用し、行と列を明確に分離する方法として、...ii,jj... の 2 つのインスタンスを ...ii, ".", jj... に変更しました。10行を超える場合、これで問題が解決するようです。

于 2013-08-27T14:58:54.657 に答える
0

この個性的なカラーリングも試してみました。テーブルに 10 を超える列がある場合に、複数の色を塗りつぶすための解決策を見つけました。

grid.gedit(...) を grid.edit(...) に間違って入力したところ、テーブルが正しく入力されました。

理由はわかりませんが、少なくとも機能します。

その理由がわかる方、回答を教えてください。

于 2012-08-15T17:26:58.270 に答える