【发布时间】:2016-12-23 19:33:57
【问题描述】:
下面的代码生成一个包含 3 行和 3 列的输入表(为了简化情况 - 见下图)。根据输入,我需要在输入表下方生成 9 个直方图,重要的是直方图应与输入框垂直对齐。目前情况并非如此。
我正在考虑的一个选项是在包含绘图之前使用偏移量 1。为了确保绘图对齐,输入的行名(alt1、alt2、a3)应该以这样的方式出现,即它们恰好占据 1 列以匹配偏移量。默认情况下,renderTable 似乎使用了自动调整。我在网上搜索过,但找不到控制行名宽度的方法。
有人可以帮忙吗?任何输入将不胜感激。非常感谢。
library(shiny)
library(grid)
library(gridBase)
u <- shinyUI(navbarPage(
"My Application",
tabPanel("Component 1",
fluidPage(
fluidRow(column(6,
tableOutput('decision_Matrix'),offset=0)
),
fluidRow(column(5,
plotOutput('decision_Matrix_plots')
,offset=1)
)
)),
tabPanel("Component 2")
))
s <- shinyServer(
function(input,output) {
output$decision_Matrix <- renderTable({
matrix_input <- matrix(data = NA,nrow = 3,ncol = 3)
for (j in 1:3) {
for (i in 1:3) {
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","a3")
colnames(matrix_input) <- c("crit1","crit2","t3")
matrix_input
},include.rownames = TRUE,sanitize.text.function = function(x) x)
output$decision_Matrix_plots <- renderPlot({
layout(matrix(c(1,2,3,4,5,6,7,8,9),nrow = 3,ncol = 3))
for (j in 1:3) {
for (i in 1:3) {
set.seed(123)
n <- input[[paste0("C",j,"_A",i)]]
if (is.null(n) || is.na(n) || n < 1) n <- 1
hist(rnorm(n),breaks = 10,main=sprintf("histogram of rnorm( %d )",n))
}
}
recordPlot()
})
})
shinyApp(ui = u,server = s)
【问题讨论】: