2016-04-30 6 views
0

私は、セルの背景色がセルの値にマップされた色の勾配に従って設定される、knitrでテーブルを生成できるようにしたいと考えています。ニットでヒートマップスタイルのテーブルを作成する便利な方法はありますか?

たとえば、towards the bottom of this pageを参照してください。

パンダは、条件付きハイライトのいくつかの種類を実行できるように見えますが、as described in this questionですが、セル背景の条件付き書式設定を可能にするオプションが見つかりません。

+0

'pander'はそれがpandoc'の値下げ'ではサポートされていないとして、着色細胞を支援することはできませんが、あなたがしたい場合HTML出力など、他のドキュメントフォーマットを生成する必要はありません。私は、https://github.com/renkun-ken/formattableに試してみることを提案します。 – daroczig

答えて

3

単にxtableに渡されるデータフレームを解析し、テーブルエントリを評価し、ちょうど対応して追加することによって、私は過去にはLaTeXでこれを達成したthat page

+0

参照する書式設定されたテーブルのコードが.Rnwスクリプト(knitrおよびLaTeX)のチャンクに含まれている場合、ライブラリ(formattable)が呼び出された後、結果のpdfファイルにエラーメッセージが表示されます。 (expr、envir、enclos):関数formattableを見つけることができませんでした。 .Rnwとxelatexなどのパッケージは動作しますか? – lawyeR

+0

@Dontas、それは壊れたリンクのようです。 –

1

の底に例えば年齢欄を参照してください。 LaTeXカラーマークアップ。例えば、私のLaTeXのプリアンブルは、この含まれています:

\usepackage{xcolor,colortbl} 
\definecolor{darkblue}{rgb}{0.0,0.0,0.3} 
\definecolor{blue0}{HTML}{E5E5FE} 
\definecolor{blue1}{HTML}{CBCBFE} 
\definecolor{blue2}{HTML}{B2B2FE} 
\definecolor{blue3}{HTML}{9898FE} 
\definecolor{blue4}{HTML}{7F7FFE} 
\definecolor{blue5}{HTML}{6666FE} 
\definecolor{blue6}{HTML}{4C4CFE} 
\definecolor{blue7}{HTML}{3333FE} 
\definecolor{blue8}{HTML}{1919FE} 
\definecolor{blue9}{HTML}{0000FE} 

をし、私のコードで私は(KnownResultsが数値エントリを持つデータフレームである)、このネストされたforループを使用します。私はあなたが変更することができると確信して

for(i in seq_along(colnames(KnownResults))){ 
    for(q in seq_along(rownames(KnownResults))){ 
    if(KnownResults[q,i]!="NA"){ 
      if(KnownResults[q,i] > 0.9){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue9}{", 
             "\\textcolor{white}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}}")    
      } else if(KnownResults[q,i] > 0.8){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue8}{", 
             "\\textcolor{white}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}}") 
      } else if(KnownResults[q,i] > 0.7){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue7}{", 
             "\\textcolor{white}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}}") 
      } else if(KnownResults[q,i] > 0.6){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue6}{", 
             "\\textcolor{white}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}}") 
      } else if(KnownResults[q,i] > 0.5){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue5}{", 
             "\\textcolor{white}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}}") 
      } else if(KnownResults[q,i] > 0.4){    
      KnownResults[q,i] <- paste0("\\cellcolor{blue4}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}") 
      } else if(KnownResults[q,i] > 0.3){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue3}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}") 
      } else if(KnownResults[q,i] > 0.2){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue2}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}") 
      } else if(KnownResults[q,i] > 0.1){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue1}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}") 
      } else if(KnownResults[q,i] > 0.0){ 
      KnownResults[q,i] <- paste0("\\cellcolor{blue0}{", 
             formatC(KnownResults[q,i], format='f', digits=4), 
             "}") 
      } else {} 

    } else { KnownResults[q,i]<-"NS"} 
    } 

} 

をこれはあなたのニーズに合ったものです(コードを単純化する可能性もあります)。

また、グラデーションのカラー値は、このコードを使用して、所定れた:

HPSColors<-colorRamp(c('white','blue')) 
HPSColors<-rgb(HPSColors(seq(from=0.1,to=1.0,by=0.1)),maxColorValue=256) 
関連する問題