簡體   English   中英

渲染ggplot時出現問題

[英]Issues rendering ggplot in shiny

我目前在使劇情變得閃亮時遇到問題。 布局一切正常,但運行時不會出現圖。

鏈接到csv文件中的數據: https : //www.dropbox.com/s/hv3k12ja9r10tzz/pointvaluedfmelt.csv? dl =0

用戶界面代碼:

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-渲染圖不需要在其上使用“ 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM