Hi,
I am trying to make real time visualization using Shiny. The data is stored in MySQL, i am connecting it to Shiny using pool package. Its almost complete, I have tables and plots working fine but the filters doesn't not work, it does not update the graphs.
Please find the code below, any help is appreciated.
Load RShiny libraries
library(shiny)
library(shinythemes)
library(DBI)
library(pool)
library(RMySQL)
library(dplyr)
library(tidyverse)
library(DT)
library(plotly)
library(ggplot2)
library(dbplyr)
library(tibble)
Connecting to the database
pool <- pool::dbPool(RMySQL::MySQL(),
)
onStop(function(){
poolClose(pool)
})
Define the input
ui <- fluidPage(theme = shinytheme("slate"),
ui <- navbarPage(
title = strong('BFU+/CED - Recruiting'),
position = 'static-top',
collapsible = FALSE,
fluid = TRUE,
#theme = shinytheme('slate'),
# titlePanel("BFU+/CED - Recruiting"),
# br(),
sidebarPanel(width = 2,
br(),#to introduce extra vertical spacing
selectInput(inputId = "filter1",
label = "Diagnosis",
choices = "Names"),
br(),
selectInput("filter2",
label="Drugs used",
choices = list("",
"Infliximab",
"Adalimumab",
"Certolizumab",
"Golimumab",
"Vedolizumab",
"Ustekinumab",
"Tofacitinib",
"Filgotinib",
"Ozanimod",
"Other"),
selected = NULL),
br(),
selectInput("filter3",
label="Response",
choices = list("",
"Super-response",
"Response",
"Partial response",
"Non-response",
"Allergic reaction",
"Low disease activity"),
selected = NULL),
br(), #to introduce extra vertical spacing
selectInput("filter4",
label="Events",
choices = list("",
"Week 0",
"Week 2",
"Week 6",
"Week 14",
"Week 26",
"Week 52",
"Week 78",
"Week 104"),
selected = NULL)
),
mainPanel( width = 10,
tabsetPanel(
tabPanel("Consents and Demographics", tableOutput("consents"), br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plot",width="250px",height="250px"),
plotOutput("plot2",width="250px",height="250px"),
plotOutput("plot3",width="250px",height="250px"),
plotOutput("plot4",width="250px",height="250px"),
plotOutput("plot5",width="250px",height="250px")),
br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plot6",width="250px",height="250px"),
plotOutput("plot7",width="250px",height="250px"),
plotOutput("plot8",width="250px",height="250px"),
plotOutput("plot9",width="250px",height="250px"),
plotOutput("plot10",width="250px",height="250px")
)
),
tabPanel("Anamnesis", tableOutput("anamnesis"), br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plota1",width="250px",height="250px"),
plotOutput("plota2",width="250px",height="250px"),
plotOutput("plota3",width="250px",height="250px"),
plotOutput("plota4",width="250px",height="250px"),
plotOutput("plota5",width="250px",height="250px")
)),
tabPanel("Clinical Visit", tableOutput("clinical"), br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plotcv1",width="300px",height="300px"),
plotOutput("plotcv2",width="250px",height="250px"),
plotOutput("plotcv3",width="250px",height="250px"),
plotOutput("plotcv4",width="250px",height="250px"),
plotOutput("plotcv5",width="250px",height="250px")),
br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plotcv6",width="250px",height="250px"),
plotOutput("plotcv7",width="250px",height="250px"),
plotOutput("plotcv8",width="250px",height="250px"),
plotOutput("plotcv9",width="250px",height="250px"),
plotOutput("plotcv10",width="250px",height="250px")),
br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plotcv11",width="250px",height="250px"),
plotOutput("plotcv12",width="250px",height="250px"),
)
),
tabPanel("Routine lab values", tableOutput("routine"), br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plotr2",width="250px",height="250px"),
plotOutput("plotr3",width="250px",height="250px"),
plotOutput("plotr4",width="250px",height="250px"),
plotOutput("plotr5",width="250px",height="250px")),
br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plotr6",width="250px",height="250px"),
plotOutput("plotr7",width="250px",height="250px"),
plotOutput("plotr8",width="250px",height="250px"),
plotOutput("plotr9",width="250px",height="250px"),
)
),
tabPanel("Endoscopy", tableOutput("endo"), br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plote1",width="250px",height="250px"),
plotOutput("plote2",width="250px",height="250px"),
plotOutput("plote3",width="250px",height="250px"),
plotOutput("plote4",width="250px",height="250px"),
plotOutput("plote5",width="250px",height="250px")),
br(),
splitLayout(cellWidths = c(250,250,250,250,250),
plotOutput("plote6",width="250px",height="250px"),
plotOutput("plote7",width="250px",height="250px"),
plotOutput("plote8",width="250px",height="250px"),
plotOutput("plote9",width="250px",height="250px"),
plotOutput("plote10",width="250px",height="250px"),
)
),
)
)
)
)
Define the output
server <- function(input, output, session){
#Creating dataframes
condata <- reactive({tbl(pool, "consents_and_demographics") %>%
select(consent,consent_guide_ibd,diagnosis,diagnosis_year,used_drug,other_study_drug,sex,age,age_first_diagnosis,ethnicity)
})
#updated_consent <- tbl(pool, "consents_and_demographics") %>% select(consent,consent_guide_ibd,diagnosis,diagnosis_year,used_drug,other_study_drug,sex,age,age_first_diagnosis,ethnicity)
anamnesis_db <- tbl(pool,"anamnesis") %>% select(diet,smoking,alcohol,prednisolone_status,aza_status)
clinical_db <- tbl(pool,"clinical_visit") %>% select(bmi,cd_pro2,cd_pro3,cdai,uc_pro2,partial_mayo,complete_mayo,current_prednisolon_dose,current_dose,cumulative_dose,response,low_activity,remission)
endoscopy_db <- tbl(pool,"endoscopy") %>% select(sescd,cd_location,cd_disease_behaviour,cd_perianal,extent_uc,endo_mayo,nancy_index,nancy_index_ulceration,nancy_index_acute,nancy_index_chronic)
routine_db <- tbl(pool,"routine_lab_values") %>% select(leucocytes,hemoglobin,hematokrit,thrombocytes,eosinophils,crp,il6,tryptophan,calprotectin)
observe({
updateSelectInput(session, "filter1", choices = condata()$diagnosis)
})
output$plot <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=consent)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3)
# Outline the bins in black
})
output$plot2 <- renderPlot({ggplot(condata(), aes(x=consent_guide_ibd)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot3 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=diagnosis)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot4 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=diagnosis, y=diagnosis_year)) + # Create object called output$plot
with a ggplot inside it
geom_point(width=0.3) # Outline the bins in black
})
output$plot5 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=used_drug)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot6 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=other_study_drug)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot7 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=sex)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot8 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=age)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot9 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=age_first_diagnosis)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plot10 <- renderPlot({ggplot(pool %>% tbl("consents_and_demographics"), aes(x=ethnicity)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$consents <- renderTable({
condata() %>% head(10)
})
output$anamnesis <- renderTable({
anamnesis_db %>% head(10)
})
output$plota1 <- renderPlot({ggplot(pool %>% tbl("anamnesis"), aes(x=diet)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plota2 <- renderPlot({ggplot(pool %>% tbl("anamnesis"), aes(x=smoking)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plota3 <- renderPlot({ggplot(pool %>% tbl("anamnesis"), aes(x=alcohol)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plota4 <- renderPlot({ggplot(pool %>% tbl("anamnesis"), aes(x=prednisolone_status)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plota5 <- renderPlot({ggplot(pool %>% tbl("anamnesis"), aes(x=aza_status)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$clinical <- renderTable({
clinical_db %>% head(10)
})
output$plotcv1 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(y=bmi)) +
geom_bar(width=0.3)
})
output$plotcv2 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=cd_pro2)) + # Create object called output$plot
with a ggplot inside it
geom_bar() # Outline the bins in black
})
output$plotcv3 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=cd_pro3)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv4 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=cdai)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv5 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=uc_pro2)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv6 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=partial_mayo)) + # Create object called output$plot
with a ggplot inside it
geom_bar() # Outline the bins in black
})
output$plotcv7 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=complete_mayo)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv8 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=current_prednisolon_dose)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv9 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=current_dose)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv10 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=cumulative_dose)) + # Create object called output$plot
with a ggplot inside it
geom_bar() # Outline the bins in black
})
output$plotcv11 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=response)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv12 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=low_activity)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotcv13 <- renderPlot({ggplot(pool %>% tbl("clinical_visit"), aes(x=remission)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$routine <- renderTable({
routine_db %>% head(10)
})
output$plotr2 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=leucocytes)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr3 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=hemoglobin)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr4 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=hematokrit)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr5 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=thrombocytes)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr6 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=eosinophils)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr7 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=crp)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr8 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=il6)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr9 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=tryptophan)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plotr10 <- renderPlot({ggplot(pool %>% tbl("routine_lab_values"), aes(x=calprotectin)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$endo <- renderTable({
endoscopy_db %>% head(10)
})
output$plote1 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=sescd)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plote2 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=cd_location)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote3 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=cd_disease_behaviour)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plote4 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=cd_perianal)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote5 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=extent_uc)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote6 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=endo_mayo)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote7 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=nancy_index)) +
geom_bar(width=0.3) # Outline the bins in black
})
output$plote8 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=nancy_index_ulceration)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote9 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=nancy_index_acute)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
output$plote10 <- renderPlot({ggplot(pool %>% tbl("endoscopy"), aes(x=nancy_index_chronic)) + # Create object called output$plot
with a ggplot inside it
geom_bar(width=0.3) # Outline the bins in black
})
}
shinyApp( ui, server)