R Shiny - 如何使用 "melt" 函数(reshape2 包)创建堆叠条形图
R Shiny - How to use the "melt" function (reshape2 package) to create a stacked barplot
感谢您的回答,我设法制作了一个根据时间单位(周、月、年)做出反应并按时间单位汇总数据的条形图(link 在这里):
然后,我想制作一个包含两个变量的堆叠条形图。为此,我生成了包含两个变量的后续数据框(即在我的示例中:Imported_cases 和 Autochthonous_cases),并应用了“melt”函数。 UI 在这里:
library(shiny)
library(dplyr)
library(lubridate)
library(ggplot2)
library(scales)
library(reshape2)
Disease <- data.frame(
Date = seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),
Imported_cases = rep(1),Autochtonous_cases=rep(2))
Disease <- Disease %>% mutate(
Week = format(Date, "%Y-%m-%U"),
Month = format(Date, "%Y-%m"), Year = format(Date, "%Y"))
Disease<- melt(Disease, id = c("Date","Week","Month","Year"),
measured = c("Imported_cases", "Autochtonous_cases"))
print(head(Disease))
ui <- fluidPage(
dateRangeInput("daterange", "Choice the date",
start = min(Disease$Date),
end = max(Disease$Date),
min = min(Disease$Date),
max = max(Disease$Date),
separator = " - ", format = "dd/mm/yy",
startview = 'Month', language = 'fr', weekstart = 1),
selectInput(inputId = 'Time_unit',
label = 'Time_unit',
choices = c('Week', 'Month', 'Year'),
selected = 'Month'),
plotOutput("Disease"))
当我 运行 我的服务器时,R Shiny 显示:找不到错误对象 'variable'。您在服务器代码下方找到:
server <- function(input, output) {
dateRangeInput <- reactive({
dataset <- subset(
Disease, Date >= input$daterange[1] & Date <= input$daterange[2])
dataset
})
selectInput = reactive({
dataset <- dateRangeInput() %>% group_by_(input$Time_unit) %>%
summarise(Sum = sum(value))
dataset
})
output$Disease <-renderPlot({
ggplot(data=selectInput(),
aes_string(x = input$Time_unit, y = "Sum",
fill = "variable")) +
geom_bar(stat = "identity")
})
}
shinyApp (ui = ui, server = server)
不知道是selectInput
的代码问题还是output$Disease
的代码问题。我不明白为什么Shiny找不到"variable"(cf.print(head(Disease))。谢谢你的帮助(我希望清楚)。
下面是将要运行并创建堆积条形图的代码:
library(shiny)
library(dplyr)
library(lubridate)
library(ggplot2)
library(scales)
library(reshape2)
Disease<-data.frame(Date=seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),Cases=rep(1),Autochtonous_cases=rep(2))
Disease <- Disease %>% mutate(Week = format(Date, "%Y-%m-%U"),Month = format(Date, "%Y-%m"), Year = format(Date, "%Y"))
Disease<-melt(Disease,id=c("Date","Week","Month","Year")) # just id
ui <- fluidPage(
dateRangeInput("daterange", "Choice the date",
start = min(Disease$Date),
end = max(Disease$Date),
min = min(Disease$Date),
max = max(Disease$Date),
separator = " - ", format = "dd/mm/yy",
startview = 'Month', language = 'fr', weekstart = 1),
selectInput(inputId = 'Time_unit',
label='Time_unit',
choices=c('Week','Month','Year'),
selected='Month'),
plotOutput("Disease"))
server <- function(input, output) {
dateRangeInput<-reactive({
dataset <- subset(Disease, Date >= input$daterange[1] & Date <= input$daterange[2])
dataset
})
selectInput= reactive({
dataset <- dateRangeInput() %>% group_by_(input$Time_unit,"variable") %>% summarise(Sum = sum(value)) #I have added here grouping as variable
print(head(dataset))
dataset
})
output$Disease <-renderPlot({
ggplot(data=selectInput(), aes_string(x=input$Time_unit,y="Sum", fill = "variable")) + geom_bar(stat="identity") +
labs(title="Disease", y ="Number of cases") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5))
})
}
shinyApp (ui = ui, server = server)
我想这就是您要找的。你在 melt
函数中有一些小错误,只设置 id 变量就足够了,第二件事是考虑在 group_by_
中创建的变量列(因为你想获得案例和自动案例的计数),最后是在 ggplot
中使用变量作为 fill
参数。
感谢您的回答,我设法制作了一个根据时间单位(周、月、年)做出反应并按时间单位汇总数据的条形图(link 在这里):
然后,我想制作一个包含两个变量的堆叠条形图。为此,我生成了包含两个变量的后续数据框(即在我的示例中:Imported_cases 和 Autochthonous_cases),并应用了“melt”函数。 UI 在这里:
library(shiny)
library(dplyr)
library(lubridate)
library(ggplot2)
library(scales)
library(reshape2)
Disease <- data.frame(
Date = seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),
Imported_cases = rep(1),Autochtonous_cases=rep(2))
Disease <- Disease %>% mutate(
Week = format(Date, "%Y-%m-%U"),
Month = format(Date, "%Y-%m"), Year = format(Date, "%Y"))
Disease<- melt(Disease, id = c("Date","Week","Month","Year"),
measured = c("Imported_cases", "Autochtonous_cases"))
print(head(Disease))
ui <- fluidPage(
dateRangeInput("daterange", "Choice the date",
start = min(Disease$Date),
end = max(Disease$Date),
min = min(Disease$Date),
max = max(Disease$Date),
separator = " - ", format = "dd/mm/yy",
startview = 'Month', language = 'fr', weekstart = 1),
selectInput(inputId = 'Time_unit',
label = 'Time_unit',
choices = c('Week', 'Month', 'Year'),
selected = 'Month'),
plotOutput("Disease"))
当我 运行 我的服务器时,R Shiny 显示:找不到错误对象 'variable'。您在服务器代码下方找到:
server <- function(input, output) {
dateRangeInput <- reactive({
dataset <- subset(
Disease, Date >= input$daterange[1] & Date <= input$daterange[2])
dataset
})
selectInput = reactive({
dataset <- dateRangeInput() %>% group_by_(input$Time_unit) %>%
summarise(Sum = sum(value))
dataset
})
output$Disease <-renderPlot({
ggplot(data=selectInput(),
aes_string(x = input$Time_unit, y = "Sum",
fill = "variable")) +
geom_bar(stat = "identity")
})
}
shinyApp (ui = ui, server = server)
不知道是selectInput
的代码问题还是output$Disease
的代码问题。我不明白为什么Shiny找不到"variable"(cf.print(head(Disease))。谢谢你的帮助(我希望清楚)。
下面是将要运行并创建堆积条形图的代码:
library(shiny)
library(dplyr)
library(lubridate)
library(ggplot2)
library(scales)
library(reshape2)
Disease<-data.frame(Date=seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),Cases=rep(1),Autochtonous_cases=rep(2))
Disease <- Disease %>% mutate(Week = format(Date, "%Y-%m-%U"),Month = format(Date, "%Y-%m"), Year = format(Date, "%Y"))
Disease<-melt(Disease,id=c("Date","Week","Month","Year")) # just id
ui <- fluidPage(
dateRangeInput("daterange", "Choice the date",
start = min(Disease$Date),
end = max(Disease$Date),
min = min(Disease$Date),
max = max(Disease$Date),
separator = " - ", format = "dd/mm/yy",
startview = 'Month', language = 'fr', weekstart = 1),
selectInput(inputId = 'Time_unit',
label='Time_unit',
choices=c('Week','Month','Year'),
selected='Month'),
plotOutput("Disease"))
server <- function(input, output) {
dateRangeInput<-reactive({
dataset <- subset(Disease, Date >= input$daterange[1] & Date <= input$daterange[2])
dataset
})
selectInput= reactive({
dataset <- dateRangeInput() %>% group_by_(input$Time_unit,"variable") %>% summarise(Sum = sum(value)) #I have added here grouping as variable
print(head(dataset))
dataset
})
output$Disease <-renderPlot({
ggplot(data=selectInput(), aes_string(x=input$Time_unit,y="Sum", fill = "variable")) + geom_bar(stat="identity") +
labs(title="Disease", y ="Number of cases") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5))
})
}
shinyApp (ui = ui, server = server)
我想这就是您要找的。你在 melt
函数中有一些小错误,只设置 id 变量就足够了,第二件事是考虑在 group_by_
中创建的变量列(因为你想获得案例和自动案例的计数),最后是在 ggplot
中使用变量作为 fill
参数。