在闪亮中呈现 ggplot 的问题
Issues rendering ggplot in shiny
我目前在渲染闪亮的情节时遇到问题。布局都很好,但是当运行情节没有出现。
Link 到 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- 渲染图不需要 "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)
我目前在渲染闪亮的情节时遇到问题。布局都很好,但是当运行情节没有出现。
Link 到 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- 渲染图不需要 "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)