[英]Plotly chart not updating with date slider input in r shiny
我没有收到任何错误消息,所以我有点卡在这里。 一切似乎都运行良好,但是当我在应用程序中移动 slider 小部件时,日期不会在 plotly 图表上更新。 有些东西告诉我我的 ggplot 中遗漏了一些东西(与 xlim 相关?),但我尝试的一切都会破坏应用程序。 我附上了下面的代码,以及我的数据集示例。
rm(list=ls())
#Libraries
library(shiny)
library(shinyWidgets)
library(ggplot2)
library(dplyr)
library(readxl)
library(scales)
library(ggthemes)
library (plotly)
library(shinythemes)
#Load Data
data<-read_excel("C:/Users/Kanew/OneDrive/Desktop/RApp/Unemployment2.xlsx")
data$Date<-as.Date(data$Date)
ui<-fluidPage(
theme = shinytheme("cerulean"),
tabsetPanel(
tabPanel("Welcome",
HTML(paste(
h1("Welcome!"),
p("Welcome to the Unemployment Exploration Application. In this application you will find tabs,
located at the top of your screen, for data visualization and data table exploration."), '<br/>',
p("The data visualization tab includes functionality to visualize the unemployment rate by various
racial/ethnic categories of your choice. The graph includes functions for magnification, panning,
and observing individual data points at your choice (by hovering over data points)."), '<br/>',
p(" The data table tab is a searchable data table that allows you to search the dataset and download the
dataset if you'd like."),'<br/>',
p("Enjoy!")))),
tabPanel("Data Visualization",
sidebarLayout(
sidebarPanel(
sliderInput(inputId = "Date",
label = "Dates:",
min = as.Date("2010-01-01", "%Y-%m-%d"),
max = as.Date("2021-02-01","%Y-%m-%d"),
value = as.Date("2010-01-01"), timeFormat = "%Y-%m-%d",
step = 1, animate = animationOptions(interval = 1800))),
mainPanel(h1("National Unemployment Rate by Racial/Ethnic Category"),
plotlyOutput("plot", height = 'auto', width = 'auto'),
selectInput(
inputId = "Category",
label = "Select Race or National Rate",
choices = c("All",unique(data$Category)),
selected = "All")))),
tabPanel("Data Table",
h1("Data Table"),
DT::dataTableOutput("data"))
))
server<-function(input, output){
output$plot <- renderPlotly({
data %>%
filter(Category == input$Category | input$Category == "All" | Date == input$Date) %>%
ggplot(data, mapping = aes(x=Date, y = Rate, colour = Category)) +
geom_line() +
xlab("Year") + ylab("Unemployment Rate (%)") +
scale_y_continuous(breaks=c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18))+
scale_x_date(date_breaks = "years" , date_labels = "%Y")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme_economist() +
scale_fill_economist()})
output$data <- DT::renderDataTable({DT::datatable(data)})
}
shinyApp(ui = ui, server = server)
> head(data)
# A tibble: 6 x 3
Date Category Rate
<date> <chr> <dbl>
1 2010-01-01 National 9.8
2 2010-02-01 National 9.8
3 2010-03-01 National 9.9
4 2010-04-01 National 9.9
5 2010-05-01 National 9.6
6 2010-06-01 National 9.4
> head(data, 20)
# A tibble: 20 x 3
Date Category Rate
<date> <chr> <dbl>
1 2010-01-01 National 9.8
2 2010-02-01 National 9.8
3 2010-03-01 National 9.9
4 2010-04-01 National 9.9
5 2010-05-01 National 9.6
6 2010-06-01 National 9.4
7 2010-07-01 National 9.4
8 2010-08-01 National 9.5
9 2010-09-01 National 9.5
10 2010-10-01 National 9.4
11 2010-11-01 National 9.8
12 2010-12-01 National 9.3
13 2011-01-01 National 9.1
14 2011-02-01 National 9
15 2011-03-01 National 9
16 2011-04-01 National 9.1
17 2011-05-01 National 9
18 2011-06-01 National 9.1
19 2011-07-01 National 9
20 2011-08-01 National 9
根据 ismirsehregal 的解决方案更新代码:
rm(list=ls())
#Libraries
library(shiny)
library(shinyWidgets)
library(ggplot2)
library(dplyr)
library(readxl)
library(scales)
library(ggthemes)
library (plotly)
library(shinythemes)
#Load Data
data<-read_excel("C:/Users/Kanew/OneDrive/Desktop/RApp/Unemployment2.xlsx")
uniqueCats <- unique(data$Category)
data$Date <- as.Date(data$Date)
ui<-fluidPage(
theme = shinytheme("cerulean"),
tabsetPanel(
tabPanel("Welcome",
HTML(paste(
h1("Welcome!"),
p("Welcome to the Unemployment Exploration Application. In this application you will find tabs,
located at the top of your screen, for data visualization and data table exploration."), '<br/>',
p("The data visualization tab includes functionality to visualize the unemployment rate by various
racial/ethnic categories of your choice. The graph includes functions for magnification, panning,
and observing individual data points at your choice (by hovering over data points)."), '<br/>',
p(" The data table tab is a searchable data table that allows you to search the dataset and download the
dataset if you'd like."),'<br/>',
p("Enjoy!")))),
tabPanel("Data Visualization",
sidebarLayout(
sidebarPanel(
sliderInput(inputId = "Date",
label = "Dates:",
min = min(data$Date),
max = max(data$Date),
value = min(data$Date),
timeFormat = "%Y-%m-%d",
step = 1,
animate = animationOptions(interval = 300))),
mainPanel(h1("National Unemployment Rate by Racial/Ethnic Category"),
plotlyOutput("plot", height = 'auto', width = 'auto'),
selectInput(
inputId = "Category",
label = "Select Race or National Rate",
choices = c("All", unique(data$Category)),
selected = "All")))),
tabPanel("Data Table",
h1("Data Table"),
DT::dataTableOutput("myDataTable"))
))
server<-function(input, output){
output$plot <- renderPlotly({
if(input$Category == "All"){
catFilter<-uniqueCats
} else{
catFilter<-input$Category
}
filteredData <- filter(data, Category %in% catFilter & Date <= input$Date)
req(nrow(filteredData) > 0)
myGGPlot <- ggplot(filteredData, mapping = aes(x = Date, y = Rate, colour = Category),
geom_line() +
geom_point() +
xlab("Year") + ylab("Unemployment Rate (%)") +
scale_y_continuous(breaks=c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18))+
scale_x_date(date_breaks = "years" , date_labels = "%Y")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme_economist()+
scale_fill_economist(),
ggplotly(myGGPlot))
})
output$myDataTable <- DT::renderDataTable({
DT::datatable(data)
})
}
shinyApp(ui = ui, server = server)
上面的代码中有一些问题。
首先, renderPlotly
需要一个绘图对象。 因此,您需要ggplotly
将您的 ggplot 转换为 plotly object。
此外,您的过滤器语句有问题。
请检查以下内容:
#Libraries
library(shiny)
library(shinyWidgets)
library(ggplot2)
library(dplyr)
# library(readxl)
library(scales)
library(ggthemes)
library(plotly)
library(shinythemes)
#Load Data
# myData <- read_excel("C:/Users/Kanew/OneDrive/Desktop/RApp/Unemployment2.xlsx")
myData <- data.frame(
stringsAsFactors = FALSE,
Date = c("2010-01-01","2010-02-01",
"2010-03-01","2010-04-01","2010-05-01","2010-06-01",
"2010-07-01","2010-08-01","2010-09-01","2010-10-01",
"2010-11-01","2010-12-01","2011-01-01","2011-02-01",
"2011-03-01","2011-04-01","2011-05-01","2011-06-01",
"2011-07-01","2011-08-01"),
Category = c("National","National",
"National","National","TestCategory","National","National",
"National","National","National","National","National",
"National","National","TestCategory","National","National",
"National","TestCategory","National"),
Rate = c(9.8,9.8,9.9,9.9,9.6,9.4,
9.4,9.5,9.5,9.4,9.8,9.3,9.1,9,9,9.1,9,9.1,9,9)
)
uniqueCats <- unique(myData$Category)
myData$Date <- as.Date(myData$Date)
ui <- fluidPage(theme = shinytheme("cerulean"),
tabsetPanel(
tabPanel("Welcome",
HTML(
paste(
h1("Welcome!"),
p(
"Welcome to the Unemployment Exploration Application. In this application you will find tabs,
located at the top of your screen, for data visualization and data table exploration."
),
'<br/>',
p(
"The data visualization tab includes functionality to visualize the unemployment rate by various
racial/ethnic categories of your choice. The graph includes functions for magnification, panning,
and observing individual data points at your choice (by hovering over data points)."
),
'<br/>',
p(
" The data table tab is a searchable data table that allows you to search the dataset and download the
dataset if you'd like."
),
'<br/>',
p("Enjoy!")
)
)),
tabPanel(
"Data Visualization",
sidebarLayout(
sidebarPanel(
sliderInput(
inputId = "Date",
label = "Dates:",
min = min(myData$Date),
max = max(myData$Date),
value = min(myData$Date),
timeFormat = "%Y-%m-%d",
step = 1,
animate = animationOptions(interval = 300)
)
),
mainPanel(
h1("National Unemployment Rate by Racial/Ethnic Category"),
plotlyOutput("plot"), # , height = 'auto', width = 'auto'
selectInput(
inputId = "Category",
label = "Select Race or National Rate",
choices = c("All", unique(myData$Category)),
selected = "All"
)
)
)
),
tabPanel("Data Table",
h1("Data Table"),
DT::dataTableOutput("myDataTable"))
))
server <- function(input, output) {
output$plot <- renderPlotly({
if(input$Category == "All"){
catFilter <- uniqueCats
} else {
catFilter <- input$Category
}
filteredData <- filter(myData, Category %in% catFilter & Date <= input$Date)
req(nrow(filteredData) > 0)
myGGPlot <- ggplot(filteredData, mapping = aes(x = Date, y = Rate, colour = Category)) +
geom_line() +
geom_point() +
xlab("Year") + ylab("Unemployment Rate (%)") +
scale_y_continuous(breaks = c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)) +
scale_x_date(date_breaks = "years" , date_labels = "%Y") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
theme_economist() +
scale_fill_economist()
ggplotly(myGGPlot)
})
output$myDataTable <- DT::renderDataTable({
DT::datatable(data)
})
}
shinyApp(ui = ui, server = server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.