ggplot没有显示在我的R闪亮仪表板上

时间:2020-07-30 20:01:50

标签: r shiny dashboard reactive

我正在努力弄清楚如何使情节变得被动。我的代码的重点是,您与团队一起选择一个单选按钮,其中每个团队都是其自己的数据集,购买它们都具有相同的变量。我知道我可以将所有这些合并在一起,但是我担心这会减慢应用程序本身的速度,而且如果我继续努力并添加特定玩家统计信息,那么我相信我的当​​前方法是正确的方法。

我可以在闪亮的应用程序外部轻松打印表格,但不能在其中打印。

因此,总的来说,代码可以运行,但是不会显示该图,我想我已经看了太久了,有可能忽略了一个潜在的简单错误。

我正在使用的数据集来自NBAsavant.com (link to 76ers team data

library(shiny)
library(plotly)
library(tidyverse)
library(rsconnect)
library(readr)
library(ggplot2)
library(dplyr)
library(jpeg)
library(grid)
library(RCurl)


ui <- fluidPage(
  
  titlePanel("NBA 2017-2018 Season: Shooting Analysis"),
  
  fluidRow(
    
    column(2,
      
      radioButtons(inputId = "radio", label = "Select NBA Team",
                   choices = c("76ers", "Bucks", "Bulls",
                                "Cavaliers", "Celtics", "Clippers",
                                "Grizzlies","Hawks","Heat",
                                "Hornets","Jazz","Kings",
                                "Knicks","Lakers","Magic",
                                "Mavericks","Nets","Nuggets",
                                "Pacers","Pelicans","Pistons",
                                "Raptors","Rockets","Spurs",
                                "Suns","Thunder","Timberwolves",
                                "Trail Blzers","Warriors","Wizards"),
                   selected = "76ers")
      ),
    
    fluidRow(10,
      box(width = 10,
              plotOutput("court_plot")))
  )
)

Server <- function(input, output) {
  
   TeamNBA <- reactive({
     if (input$radio == "76ers")
       SeventySixers
     else if (input$radio == "Bucks")
       Bucks
     else if (input$radio == "Bulls")
       Bulls
     else if (input$radio == "Cavaliers")
       Cavaliers
     else if (input$radio == "Celtics")
       Celtics
     else if (input$radio == "Clippers")
       Clippers
     else if (input$radio == "Grizzlies")
       Grizzlies
     else if (input$radio == "Hawks")
       Hawks
     else if (input$radio == "Heat")
       Heat
     else if (input$radio == "Hornets")
       Hornets
     else if (input$radio == "Jazz")
       Jazz
     else if (input$radio == "Kings")
       Kings
     else if (input$radio == "Knicks")
       Knicks
     else if (input$radio == "Lakers")
       Lakers
     else if (input$radio == "Magic")
       Magic
     else if (input$radio == "Mavericks")
       Mavericks
     else if (input$radio == "Nets")
       Nets
     else if (input$radio == "Nuggets")
       Nuggets
     else if (input$radio == "Pacers")
       Pacers
     else if (input$radio == "Pelicans")
       Pelicans
     else if (input$radio == "Pistons")
       Pistons
     else if (input$radio == "Raptors")
       Raptors
     else if (input$radio == "Rockets")
       Rockets
     else if (input$radio == "Spurs")
       Spurs
     else if (input$radio == "Suns")
       Suns
     else if (input$radio == "Thunder")
       Thunder
     else if (input$radio == "Timberwolves")
       Timberwolves
     else if (input$radio == "Trail Blazers")
       TrailBlazers
     else if (input$radio == "Warriors")
       Warriors
     else if (input$radio == "Wizards")
       Wizards
   })


  output$court_plot <- renderPlot({
    
    courtImg <- "http://robslink.com/SAS/democd54/nba_court_dimensions.jpg"
    court <- rasterGrob(readJPEG(getURLContent(courtImg)),
                    width=unit(1, "npc"), height=unit(1, "npc"))
    
    court_plot <- ggplot(TeamNBA, aes(x=x, y=y)) +
      annotation_custom(court, -250, 250, -50, 420) +
           geom_hex(bins = 50, alpha = .8) +
        scale_fill_continuous(type = "viridis") +
           xlim(-250, 250) +
           ylim(-50, 420)
    
    print(court_plot)
    
  })
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

由于您没有提供数据,因此我以旧的mtcars为例。

发出代码:

  • server / Server(R区分大小写)
  • 必须使用方括号调用反应性数据集:TeamNBA()
  • scale_fill_continuous(type = "viridis")使用的变量可能不在数据集中(听起来像iris数据集中的变量),所以我将其删除了
  • renderPlot的末尾,请勿使用print
  • 删除box函数中的ui
library(shiny)
library(ggplot2)
library(jpeg)
library(grid)
library(RCurl)


ui <- fluidPage(
  
  titlePanel("NBA 2017-2018 Season: Shooting Analysis"),
  
  fluidRow(
    
    column(2,
           
           radioButtons(inputId = "radio", label = "Select NBA Team",
                        choices = c("76ers", "Bucks", "Bulls",
                                    "Cavaliers", "Celtics", "Clippers",
                                    "Grizzlies","Hawks","Heat",
                                    "Hornets","Jazz","Kings",
                                    "Knicks","Lakers","Magic",
                                    "Mavericks","Nets","Nuggets",
                                    "Pacers","Pelicans","Pistons",
                                    "Raptors","Rockets","Spurs",
                                    "Suns","Thunder","Timberwolves",
                                    "Trail Blzers","Warriors","Wizards"),
                        selected = "76ers")
    ),
    
    fluidRow(10,
             
                 plotOutput("court_plot"))
  )
)

server <- function(input, output) {
  
  TeamNBA <- reactive({
    if (input$radio == "76ers")
      mtcars
    else if (input$radio == "Bucks")
      Bucks
    else if (input$radio == "Bulls")
      Bulls
    else if (input$radio == "Cavaliers")
      Cavaliers
    else if (input$radio == "Celtics")
      Celtics
    else if (input$radio == "Clippers")
      Clippers
    else if (input$radio == "Grizzlies")
      Grizzlies
    else if (input$radio == "Hawks")
      Hawks
    else if (input$radio == "Heat")
      Heat
    else if (input$radio == "Hornets")
      Hornets
    else if (input$radio == "Jazz")
      Jazz
    else if (input$radio == "Kings")
      Kings
    else if (input$radio == "Knicks")
      Knicks
    else if (input$radio == "Lakers")
      Lakers
    else if (input$radio == "Magic")
      Magic
    else if (input$radio == "Mavericks")
      Mavericks
    else if (input$radio == "Nets")
      Nets
    else if (input$radio == "Nuggets")
      Nuggets
    else if (input$radio == "Pacers")
      Pacers
    else if (input$radio == "Pelicans")
      Pelicans
    else if (input$radio == "Pistons")
      Pistons
    else if (input$radio == "Raptors")
      Raptors
    else if (input$radio == "Rockets")
      Rockets
    else if (input$radio == "Spurs")
      Spurs
    else if (input$radio == "Suns")
      Suns
    else if (input$radio == "Thunder")
      Thunder
    else if (input$radio == "Timberwolves")
      Timberwolves
    else if (input$radio == "Trail Blazers")
      TrailBlazers
    else if (input$radio == "Warriors")
      Warriors
    else if (input$radio == "Wizards")
      Wizards
  })
  
  
  output$court_plot <- renderPlot({
    
    courtImg <- "http://robslink.com/SAS/democd54/nba_court_dimensions.jpg"
    court <- rasterGrob(readJPEG(getURLContent(courtImg)),
                        width=unit(1, "npc"), height=unit(1, "npc"))
    
    court_plot <- ggplot(TeamNBA(), aes(x=mpg, y=wt)) +
      annotation_custom(court, -250, 250, -50, 420) +
      geom_hex(bins = 50, alpha = .8) +
      xlim(-250, 250) +
      ylim(-50, 420)
    
    court_plot
    
  })
}

shinyApp(ui = ui, server = server)

注意:我将aes更改为与mtcars一起使用,您必须对其进行调整

相关问题