R Shiny无法显示ggplot图表

时间:2015-06-19 13:59:36

标签: r ggplot2 shiny

我在显示ggplot(或任何形式的图表,如hist())时出现问题。我试过通过Stack Overflow查看,但提供的解决方案对此实例没有用。我无法成功显示任何图表。

我正在使用带有3.2.0版本的R studio,在Shinyapps.io上部署并通过Chrome查看。我可以在R中显示图形,但在运行时无法显示它。

这是代码问题还是我错过了我的软件包? (注意:我已经减少了尝试进行问题排查的代码,因此ui.R中未使用server.R中的变量。)

ui.R

library(shiny)
library(ggplot2)

dataset <- diamonds


diamondcolours <- unique( dataset["color"], incomparables = FALSE)    
diamondcolours <- lapply(diamondcolours, as.character)

diamondcuts <- unique( dataset["cut"], incomparables = FALSE)    
diamondcuts <- lapply(diamondcuts, as.character)

diamondclarity <- unique( dataset["clarity"], incomparables = FALSE)    
diamondclarity <- lapply(diamondclarity, as.character)

carat <- dataset["carat"]
mincarat <- min(carat[ carat != min(carat) ])
# mincarat
maxcarat <- max(carat[ carat != max(carat) ])
# maxcarat

fluidPage(

  titlePanel("Diamonds"),

  sidebarPanel(
    sliderInput('carat', 'Carat', min=mincarat, max=maxcarat,
                value=mincarat, step=0.01, round=0),    
    selectInput('cut', 'Cut', diamondcuts$cut),    
    selectInput('color', 'Color', diamondcolours$color),    
    selectInput('clarity', 'Clarity', diamondclarity$clarity)  
  ),

   mainPanel(
    plotOutput(outputId = 'mainplot')
   )
)

server.R

library(shiny)
library(ggplot2)


dataset <- diamonds()

  shinyServer(function(input, output, session) {
    values <- reactiveValues()

    testset <- dataset[ which(dataset$color == values$dcolor & dataset$carat > values$dcarat & dataset$clarity == values$dclarity & dataset$cut== values$dcut ), ]  


  output$mainplot <- renderPlot({

    p <- ggplot(dataset[dataset$price <= 326,], aes(x = carat, y = color))
    p <- p + geom_point()
    print(p)

}  )

2 个答案:

答案 0 :(得分:3)

一些更重要的问题:(1)数据应该响应用户输入,(2)引用输入的变量名称不正确,(3)UI中的所有代码应该在服务器中,或者如果是在全球环境中并不意味着被动。这是一个运行的简化版本,

library(shiny)
library(ggplot2)
dataset(diamonds)
## ** From UI: variables defined here can be seen in the whole app
mincarat <- min(diamonds$carat)
maxcarat <- max(diamonds$carat)

shinyApp(
  shinyUI(
    fluidPage(
      titlePanel("Diamonds"),
      sidebarPanel(
        sliderInput('dcarat', 'Carat', min=mincarat, max=maxcarat,
                    value=mincarat, step=0.01, round=0),
        selectInput('dcut', 'Cut', levels(diamonds$cut)),
        selectInput('dcolor', 'Color', levels(diamonds$color)),
        selectInput('dclarity', 'Clarity', levels(diamonds$clarity))  
      ),
      mainPanel(
        plotOutput('mainplot')
      )
    )        
  ),

  shinyServer(function(input, output) {
    ## values <- reactiveValues()  # unused
    ## Your data should be reactive - and reference `input` 
    ## to get user-entered values
    rxData <- reactive({
      dat <- with(diamonds, 
           diamonds[color == input$dcolor & 
                      carat > input$dcarat & 
                      clarity == input$dclarity & 
                      cut == input$dcut, ])
      dat
    })

    output$mainplot <- renderPlot({
      dataset <- rxData()  # this is the subsetted data
      p <- ggplot(dataset, aes(x = carat, y = price))
      p <- p + geom_point()
      print(p)
    })
  })
)

答案 1 :(得分:1)

该代码中存在多个错误:

  1. server.R
  2. 末尾的括号中缺少
  3. 您没有正确阅读数据
  4. 修订文件:

    library(shiny)
    library(ggplot2)
    shinyServer(function(input, output, session) {
      data("diamonds")
      dataset <- diamonds
      rm(diamonds)
      values <- reactiveValues()
    
      testset <- dataset[ which(dataset$color == values$dcolor & dataset$carat > values$dcarat & dataset$clarity == values$dclarity & dataset$cut== values$dcut ), ]
    
    
      output$mainplot <- renderPlot({
    
        p <- ggplot(dataset[dataset$price <= 326,], aes(x = carat, y = color))
        p <- p + geom_point()
        print(p)
      })
    })
    

    ui.R也是错误的。根据Shiny中的范围规则指南,你应该把这些东西放在global.R的开头。