如何在Shiny中自定义fluidRow

时间:2018-09-05 02:22:40

标签: r shiny shinydashboard

因此,我尝试创建此输出,但是使用Shiny以仪表板形式创建。应当指出的是,这是我第二周使用Shiny,所以我经验不足。

Figure

这是我的代码:

library(shiny)
library(shinydashboard)
library(ggplot2)
library(dplyr)
library(gapminder)


gm <- gapminder 
gm <- transform(gm, pop = as.numeric(pop))

cgm <- gm %>% group_by(continent,year) %>% summarise(totpop=sum(pop),avglifeExp=sum(pop*lifeExp)/totpop,avggdpPercap=sum(pop*gdpPercap)/totpop, numCountries=n())

body <- dashboardBody(

    fluidRow(

     tabBox(
      title = "Population",
      id = "proj", width=12,      
      tabPanel("Visualization", plotOutput("ggp"),    
      tabPanel("GapMinder Data", dataTableOutput("table")),
      tabPanel("Aggregated GapMinder Data", dataTableOutput("table1"))
    )

  )
),
    fluidRow(sliderInput("slider1", label = h3("Year"), min = 1952, 
        max = 2007, value = 1952, step = 5, sep ="", width="100%"))
)

# This is UI, it has a clean look because we defined body up above. 
ui <- dashboardPage(
    dashboardHeader(title = "Module 2"),
    dashboardSidebar(
        helpText("GapMinder Data: Worldwide average life expectancy, population and GPD per Capita 1952-2007"),
        menuItem),
    body
  )

# This is server function is the same as in the layout practice. 
server <- function(input, output) {

      output$tabPanelSelected <- renderText({
        input$proj

      })

      output$ggp <- renderPlot({ 

          p <- ggplot(data=subset(gm, year==input$Year), aes(x=lifeExp)) +  geom_density(alpha=.2, fill="red") + xlab("Life Expectancy")

          q <- ggplot(data=subset(cgm,year==input$Year), aes(x=continent, y=totpop, fill=continent)) + geom_bar(stat="identity")            

          r <- ggplot(data=subset(cgm,year==input$Year), aes(x=continent, y=avggdpPercap, fill=continent)) + geom_bar(stat="identity")  
      print(p)
      print(q)
      print(r)   
  })

    output$table <- renderDataTable({gm})
    output$table1 <- renderDataTable({cgm})
}

shinyApp(ui=ui, server=server)

这是我收到的错误消息:Error Message

所以我无法弄清楚我体内的代码是怎么回事。我认为ui代码还可以,而且我几乎可以确定我的服务器代码不符合语法,但是错误消息实际上并不允许我对其进行解码。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

参考上面的图片,我已经修改了您的代码以得到类似的表示形式。

$_POST['sizes']

我对闪亮的知识最少,我觉得没有理由说明为什么没有得到任何情节。

  1. 您没有完全实现library(shiny) library(shinydashboard) library(ggplot2) library(dplyr) library(gapminder) gm <- gapminder gm <- transform(gm, pop = as.numeric(pop)) cgm <- gm %>% group_by(continent,year) %>% summarise(totpop = sum(pop),avglifeExp = sum(pop*lifeExp)/totpop,avggdpPercap = sum(pop*gdpPercap)/totpop, numCountries=n()) # This is UI, it has a clean look because we defined body up above. ui <- dashboardPage( dashboardHeader(title = "Module 2"), dashboardSidebar( helpText("GapMinder Data: Worldwide average life expectancy, population and GPD per Capita 1952-2007") ), dashboardBody( # fluidRow( # # tabBox( # title = "Population", # id = "proj", tabPanel("Visualization", fluidRow( column(4, plotOutput("ggp")), column(4, plotOutput("ggp2")), column(4, plotOutput("ggp3")) ) #tabPanel("GapMinder Data", dataTableOutput("table")), #tabPanel("Aggregated GapMinder Data", dataTableOutput("table1")) # ) # # ) ), fluidRow(sliderInput("slider1", label = h3("Year"), min = 1952, max = 2007, value = 1952, step = 5, sep = "", width="100%")) ) ) # This is server function is the same as in the layout practice. server <- function(input, output, session) { session$onSessionEnded(stopApp) # output$tabPanelSelected <- renderText({ # input$proj # # }) output$ggp <- renderPlot({ ggplot(data = subset(gm, year = input$Year), aes(x = lifeExp)) + geom_density(alpha = 0.2, fill = "red") + xlab("Life Expectancy") }) output$ggp2 <- renderPlot({ ggplot(data = subset(cgm,year = input$Year), aes(x = continent, y = totpop, fill = continent)) + geom_bar(stat = "identity") }) output$ggp3 <- renderPlot({ ggplot(data = subset(cgm,year = input$Year), aes(x = continent, y = avggdpPercap, fill = continent)) + geom_bar(stat = "identity") # print(p) # print(q) # print(r) }) #output$table <- renderDataTable({gm}) #output$table1 <- renderDataTable({cgm}) } shinyApp(ui = ui, server = server) 。只需删除menuItem,您就会发现您不再遇到上述错误。
  2. menuItem是比较运算符,而不是赋值运算符。因此,在ggplot中将==替换为==。现在您至少可以看到一个图。
  3. 对于每个图,您需要在=中单独定义它,以便您可以 稍后在UI代码中分配该ID,并分别定义该图。

我假设您可以根据需要改进代码。如果您有任何困难,我们可以在这里为您提供帮助。祝你好运。