我试图用两个面板设置一个闪亮的vis。
我还希望在每个面板中使用fluidPage布局,在那里我可以有列。
我继续尝试这一点。但我的代码并没有正常运作。
我最后得到一个页面,其中有两个标签,但它们都不起作用。此外,两个标签都没有人们期望出现的文本。
以下是我的闪亮应用的截图。请注意顶部的选项卡,它们没有任何用处:
如何让标签正确互动?有没有办法让2个选项卡,并在每个选项卡中,使用fluidPage函数来创建自定义行和列?
UI.R
shinyUI(fluidPage(
titlePanel("Shiny Viz!"),
mainPanel(
tabsetPanel(
fluidRow(
column(4,
tabPanel("Controls", checkboxGroupInput("select", label="", choices = list("Age" = "Age", "Weight" = "Weight", "Circumference" = "Circumference"), inline=TRUE))),
column(4,
plotOutput("select"))
))),
tabsetPanel(
fluidRow(
column(4,
tabPanel("output_at_some_point"))))
))
SERVER.R
library(shiny)
library(ggplot2)
DF <- as.data.frame(matrix(c(1:9),ncol=3,nrow=3))
DF <- data.frame(replicate(3,1:3))
names(DF) <- c("Age", "Weight", "Circumference")
shinyServer(function(input, output) {
output$select <- renderPlot({
# modify DF
DF_with_tests_selected <- subset(DF, select = input$select)
#ggplot
p <- ggplot(DF)
p <- p + geom_segment(aes(x=1, xend=1, y=2, yend=3))
plot(p)
})
})
答案 0 :(得分:4)
我不太清楚我是否理解您对应用的期望,因此我无法告诉您代码的错误。但是,我可以回答这个问题:
有没有办法让2个标签,并在每个标签内,使用fluidPage函数创建自定义行和列?
是的,有可能,请看示例。
请注意,我使用的是fluidRow
而不是mainPanel
,但我不确定它是否会产生很大的影响。此外,这是一个单文件闪亮的应用程序。
我会从应用程序中删除屏幕截图,但似乎我不能。
# UI components.
ui <- fluidPage(
titlePanel("Shiny Viz!"),
fluidRow( class= "R1",
tabsetPanel(type= "pills",
tabPanel("Controls",
fluidRow(column(4, offset=1, selectInput("X", label="x var",
choices = list("Age" = "Age", "Weight" = "Weight", "Circumference" = "Circumference"),
multiple=F) ),
column(4,selectInput("Y", label="y var",
choices = list("Age" = "Age", "Weight" = "Weight", "Circumference" = "Circumference"),
multiple=F))) ,
fluidRow(column(5, offset=1, plotOutput("plot", height = "400px") ),
column(5, class= "R2C2", helpText("This is an exemple") ) ) ),
tabPanel("output_at_some_point",
div(style = "height:800px; background-color: yellow;", "This is an example")))
), tags$head(tags$style(".R2C2{height:250px; background-color: red;}
.R1{background-color: lightgray;}"))
)
library(ggplot2)
# Create fake data
DF <- data.frame( Age = rnorm(50, 45, 20), Weight= runif(50, 50 , 200), Circumference = runif(50, 30 , 100) )
# server component
server <- function(input, output) {
output$plot <- renderPlot({
DF$X <- DF[, which(names(DF) == input$X)]
DF$Y <- DF[, which(names(DF) == input$Y)]
ggplot(DF, aes( x= X, y= Y)) + geom_point() + labs(list(x = input$X, y = input$Y))
} )
}
shinyApp(ui=ui, server=server)
答案 1 :(得分:1)