【问题标题】:Issues rendering ggplot in shiny在闪亮中呈现 ggplot 的问题
【发布时间】:2016-09-13 23:30:57
【问题描述】:

我目前在渲染我的情节时遇到问题。布局一切正常,但运行时没有出现绘图。

链接到 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)
})
  }

【问题讨论】:

    标签: r csv ggplot2 shiny rstudio


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2016-06-09
      • 1970-01-01
      相关资源
      最近更新 更多