使用renderTable()输出好看的矩阵

时间:2014-03-07 13:51:54

标签: r shiny

我正在服务器中创建一个矩阵。我想使用renderTable()在屏幕上输出这个矩阵。 (我在服务器中创建它,因为它的长度(以及其他)取决于ui中的一些其他输入。

正如您将在下面看到的代码(或附图),出现的矩阵看起来并不好看:它是一个灰色边框,圆角等矩阵。

所以问题是:有没有办法控制矩阵的外观?例如,我可能不想要边框,我可能希望rownames是斜体/粗体等...

shiny::runApp(
list(
ui = pageWithSidebar(

headerPanel("TEST"),

sidebarPanel(
helpText('This matrix is pretty ugly:')
),

mainPanel(    
uiOutput('matrix')     
)
)
, 
server = function(input,output){
output$matrix <- renderTable({

matrix <- matrix(rep(1,6),nrow=3)

rownames(matrix) <- c('a','b','c')
matrix

})
}
)
)

enter image description here

3 个答案:

答案 0 :(得分:17)

Mathjax渲染:

library(xtable)

shiny::runApp(
  list(
    ui = pageWithSidebar(

      headerPanel("TEST"),

      sidebarPanel(
        helpText('Is this matrix cool ?')
      ),

      mainPanel(    
        uiOutput('matrix')     
      )
    )
    , 
    server = function(input,output){
      output$matrix <- renderUI({
        M <- matrix(rep(1,6),nrow=3)
        rownames(M) <- c('a','b','c')
        M <- print(xtable(M, align=rep("c", ncol(M)+1)), 
                          floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
        html <- paste0("$$", M, "$$")
        list(
          tags$script(src = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/2.0-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML', type = 'text/javascript'),
          HTML(html)
        )
      })
    }
  )
)

enter image description here

2015年7月更新

有些东西发生了变化,MathJax渲染不再起作用了。也许这是MathJax库的链接,我不知道。无论如何,Shiny中有一个新功能,withMathJax,它完成了这项工作。将server函数替换为以下函数:

server = function(input,output){
    output$matrix <- renderUI({
        M <- matrix(rep(1,6),nrow=3)
        rownames(M) <- c('a','b','c')
        M <- print(xtable(M, align=rep("c", ncol(M)+1)), 
                   floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
        html <- paste0("$$", M, "$$")
        list(
            withMathJax(HTML(html))
        )
    })
}

答案 1 :(得分:7)

你可以开始摆弄CSS,但为了快速工作,googleVis包很不错。可以在文档中找到添加装饰的其他选项。

shiny::runApp(
  list(
    ui = pageWithSidebar(

      headerPanel("TEST"),

      sidebarPanel(
        helpText('This matrix is quite nice:')
      ),

      mainPanel(    
        uiOutput('matrix')     
      )
    )
    , 
    server = function(input,output){
      library(googleVis)
      output$matrix <- renderGvis({
        df <- as.data.frame(matrix(rnorm(9),nrow=3))      
        rownames(df) <- c('a','b','c')
        gvisTable(df);

      })
    }
  )
)

答案 2 :(得分:0)

对于googleVis包中的rownames,请使用:

 shiny::runApp(
  list(
ui = pageWithSidebar(

  headerPanel("TEST"),

  sidebarPanel(
    helpText('This matrix is quite nice:')
  ),

  mainPanel(    
    uiOutput('matrix')     
  )
)  
, 
server = function(input,output){
  library(googleVis)
  output$matrix <- renderGvis({
    df <- as.data.frame(matrix(rnorm(9),nrow=3))      
    df <- cbind(' ' = c('a','b','c'),df) 
    gvisTable(df);

  })
}
  )
)