2016-05-17 118 views
0

我目前有问题,使我的情节闪亮。布局一切正常,但运行时不会出现剧情。渲染ggplot闪亮的问题

链接到数据在csv文件: https://www.dropbox.com/s/hv3k12ja9r10tzz/pointvaluedfmelt.csv?dl=0

UI代码:

library(shiny) 
library(ggplot2) 
library(RColorBrewer) 

pointvaluedf.melt<- read.csv("pointvaluedfmelt.csv", stringsAsFactors = F) 
pointvaluedf.melt$X<- NULL 
pointvaluedf.melt$PLAYER_NAME<- as.factor(pointvaluedf.melt$PLAYER_NAME) 
pointvaluedf.melt$TEAM_ABBREVIATION<- as.factor(pointvaluedf.melt$TEAM_ABBREVIATION) 
pointvaluedf.melt$name.zone<- as.factor(pointvaluedf.melt$name.zone) 

ui <- fluidPage(

    titlePanel("Top 5 Most Valuable Shots by Player"), 
    sidebarLayout(
    sidebarPanel(selectInput("team", 
         label = "Choose a Team", 
         choices = c("Celtics", "Nets","Knicks", "76ers", "Raptors", 
            "Mavericks","Rockets","Grizzlies","Pelicans", 
            "Spurs","Bulls","Cavs","Pistons","Pacers","Bucks", 
            "Nuggets","Timberwolves","Thunder","Blazers", 
            "Jazz","Hawks","Hornets","Heat","Magic","Wiz", 
            "Warriors","Clippers","Lakers","Suns","Kings"), 
         selected = "Celtics"), width = 2 
    ), 
    mainPanel(plotOutput("myplot")) 

)) 

服务器代码:

library(shiny) 
library(ggplot2) 
library(RColorBrewer) 

pointvaluedf.melt<- read.csv("pointvaluedfmelt.csv", stringsAsFactors = F) 
pointvaluedf.melt$X<- NULL 
pointvaluedf.melt$PLAYER_NAME<- as.factor(pointvaluedf.melt$PLAYER_NAME) 
pointvaluedf.melt$TEAM_ABBREVIATION<- as.factor(pointvaluedf.melt$TEAM_ABBREVIATION) 
pointvaluedf.melt$name.zone<- as.factor(pointvaluedf.melt$name.zone) 

server <- function(input, output) { 

    df<- reactive({pointvaluedf.melt[pointvaluedf.melt$TEAM_ABBREVIATION==input$team,]}) 

    output$myplot <- renderPlot(function(){ 

    dd<- df() 

    tea <- switch(input$team, 
       "Celtics" = "BOS", 
       "Nets" = "BKN", 
       "Knicks" = "NYK", 
       "76ers" = "PHI", 
       "Raptors" = "TOR", 
       "Mavericks" = "DAL", 
       "Rockets" = "HOU", 
       "Grizzlies" = "MEM", 
       "Pelicans" = "NOP", 
       "Spurs" = "SAS", 
       "Bulls" = "CHI", 
       "Cavs" = "CLE", 
       "Pistons" = "DET", 
       "Pacers" = "IND", 
       "Bucks" = "MIL", 
       "Nuggets" = "DEN", 
       "Timberwolves" = "MIN", 
       "Thunder" = "OKC", 
       "Blazers" = "POR", 
       "Jazz" = "UTA", 
       "Hawks" = "ATL", 
       "Hornets" = "CHA", 
       "Heat" = "MIA", 
       "Magic" = "ORL", 
       "Wiz" = "WAS", 
       "Warriors" = "GSW", 
       "Lakers" = "LAL", 
       "Clippers" = "LAC", 
       "Suns" = "PHX", 
       "Kings" = "SAC") 

    p<- ggplot(data=head(subset(dd, TEAM_ABBREVIATION %in% tea) 
         [order(-subset(dd, TEAM_ABBREVIATION %in% tea)[,4]),],5), 
      aes(x=reorder(name.zone,-value), y=value))+ 
    geom_bar(stat="identity", fill="#4292C6", col="black", size=1.2)+ 
    theme(axis.text.x=element_text(angle=35, hjust=1))+ 
    labs(x="Player and Shot Type", y="Point Value", title="Top 5 Value Shots") 
    print(p) 
}) 
    } 

回答

1

里面还有一些误区:

1-渲染图不需要关于它的“function()”关键字renderPlot({})
2-您没有使用反应正确的方式。使用两个反应对象可以使它变得简单和更好,renderPlot也会将其消耗在renderPlot逻辑中。这样,您可以重用对象并使代码更清晰。
3-因为您的反应方式错误,当您更改值时,data.frame为空...

library(shiny) 
library(ggplot2) 
library(RColorBrewer) 

pointvaluedf.melt<- read.csv("pointvaluedfmelt.csv", stringsAsFactors = F) 
pointvaluedf.melt$X<- NULL 
pointvaluedf.melt$PLAYER_NAME<- as.factor(pointvaluedf.melt$PLAYER_NAME) 
pointvaluedf.melt$TEAM_ABBREVIATION<- pointvaluedf.melt$TEAM_ABBREVIATION 
pointvaluedf.melt$name.zone<- as.factor(pointvaluedf.melt$name.zone) 

ui <- fluidPage(

    titlePanel("Top 5 Most Valuable Shots by Player"), 
    sidebarLayout(
    sidebarPanel(selectInput("team", 
          label = "Choose a Team", 
          choices = c("Celtics", "Nets","Knicks", "76ers", "Raptors", 
             "Mavericks","Rockets","Grizzlies","Pelicans", 
             "Spurs","Bulls","Cavs","Pistons","Pacers","Bucks", 
             "Nuggets","Timberwolves","Thunder","Blazers", 
             "Jazz","Hawks","Hornets","Heat","Magic","Wiz", 
             "Warriors","Clippers","Lakers","Suns","Kings"), 
          selected = "Celtics"), width = 2 
    ), 
    mainPanel(plotOutput("myplot")) 

)) 

server <- function(input, output, session) { 

    df <- reactive({ 
    pointvaluedf.melt[pointvaluedf.melt$TEAM_ABBREVIATION==tea(),] 
    }) 

    tea <- reactive({ 
    switch(input$team, 
      "Celtics" = "BOS", 
      "Nets" = "BKN", 
      "Knicks" = "NYK", 
      "76ers" = "PHI", 
      "Raptors" = "TOR", 
      "Mavericks" = "DAL", 
      "Rockets" = "HOU", 
      "Grizzlies" = "MEM", 
      "Pelicans" = "NOP", 
      "Spurs" = "SAS", 
      "Bulls" = "CHI", 
      "Cavs" = "CLE", 
      "Pistons" = "DET", 
      "Pacers" = "IND", 
      "Bucks" = "MIL", 
      "Nuggets" = "DEN", 
      "Timberwolves" = "MIN", 
      "Thunder" = "OKC", 
      "Blazers" = "POR", 
      "Jazz" = "UTA", 
      "Hawks" = "ATL", 
      "Hornets" = "CHA", 
      "Heat" = "MIA", 
      "Magic" = "ORL", 
      "Wiz" = "WAS", 
      "Warriors" = "GSW", 
      "Lakers" = "LAL", 
      "Clippers" = "LAC", 
      "Suns" = "PHX", 
      "Kings" = "SAC") 
    }) 


    output$myplot <- renderPlot({ 
    p <- ggplot(data=head(subset(df(), TEAM_ABBREVIATION %in% tea()) 
          [order(-subset(df(), TEAM_ABBREVIATION %in% tea())[,4]),],5), 
       aes(x=reorder(name.zone,-value), y=value))+ 
     geom_bar(stat="identity", fill="#4292C6", col="black", size=1.2)+ 
     theme(axis.text.x=element_text(angle=35, hjust=1))+ 
     labs(x="Player and Shot Type", y="Point Value", title="Top 5 Value Shots") 
    p 
    }) 
} 

shinyApp(ui, server)