R闪亮的直方图作为renderTable的元素

时间:2016-12-20 01:13:37

标签: r plot grid shiny

我使用数据帧从用户界面接收输入。为了简化,我们说它是2行2列。根据输入,我想绘制分布。挑战在于我需要以相同的方式呈现分布,即以"矩阵"的形式呈现。

我在下面提供了一个可重现的例子。我从错误消息中理解的是:一旦我在输入矩阵中输入数据,接收矩阵就无法通过绘图替换其元素(通常是数字)。可能我应该告诉接收数据框,它的元素不会是标准的#34;但我不知道如何。另外,也许我应该使用javascript或html来定义直方图?

这是我的ui.R和server.R的简化版本:

ui.R:

shinyUI(navbarPage(
  "My Application",
  tabPanel("Component 1",
       fluidPage(

         tableOutput('decision_Matrix'),

         tableOutput('decision_Matrix_plots')
       )),
tabPanel("Component 2")
))

server.R:

shinyServer(

function(input, output) {

output$decision_Matrix <- renderTable({

  matrix_input <- matrix(data=NA, nrow=2,ncol=2)

  for (j in 1:2) {
    for (i in 1:2) {

      matrix_input[i,j] <- paste0("<input id='C", j, "_A", i, "' type='number' class='form-control shiny-bound-input'  value='", input[[paste0("C", j, "_A", i)]], "'>")

    }
  }

  rownames(matrix_input) <- c("alt1","alt2") 
  colnames(matrix_input) <- c("crit1","crit2") 

  matrix_input

},include.rownames=TRUE, sanitize.text.function = function(x) x)  

output$decision_Matrix_plots <- renderTable({ 

  matrix_plots <- data.frame()

  for (j in 1:2) {
    for (i in 1:2) {

      n <- input[[paste0("C", j,"_A",i)]]

      matrix_plots[i,j] <- hist(rnorm(n),breaks=10)  # here is where it is not correct I think

    }}

  matrix_plots
})

})   

非常感谢任何帮助。

谢谢!

ħ

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您使用ggplot(我本来会使用grid.arrange),我不需要进行太多研究,但事实证明这也很简单。

请注意,我已将您的第二个renderTable更改为renderPlot。我还使用layout安排了您的基本图形,然后使用名为gridBase的{​​{1}}函数将基本图形转换为基于网格的图并返回。

根据请求,我还将绘图缩放为800像素宽,并在recordPlot上添加了一些CSS样式以匹配。

renderTable

产量:

enter image description here