#' mosaic UI Function
#'
#' @description A shiny Module.
#'
#' @param id,input,output,session Internal parameters for {shiny}.
#'
#' @noRd
#'
#' @importFrom shiny NS tagList
#' @importFrom ggmosaic geom_mosaic ddecker GeomMosaic GeomMosaicJitter GeomMosaicText geom_mosaic_jitter geom_mosaic_text hbar hspine mosaic product scale_x_productlist spine StatMosaic StatMosaicJitter StatMosaicText theme_mosaic vbar vspine
#' @importFrom ggplot2 ggplot theme element_blank element_text
mod_mosaic_ui <- function(id){
ns <- NS(id)
tagList(
semantic.dashboard::box(
title = 'Prevalence of Headache Symptom',
width = 16,
shiny.semantic::dropdown_input(ns('grouponevar'),
choices = c('First grouping variable: No selection',names(dataset)[2:18]),
default_text = 'First Grouping Variable',
value = 'First grouping variable: No selection'),
shiny.semantic::dropdown_input(ns('grouptwovar'),
choices = c('Second grouping variable: No selection',names(dataset)[2:18]),
default_text = 'Select Strata Variable',
value = 'Second grouping variable: No selection'),
plotly::plotlyOutput(ns('mosaic'))
),
shiny::tableOutput(ns('crosstab'))
)
}
#' mosaic Server Functions
#'
#' @noRd
mod_mosaic_server <- function(id){
moduleServer( id, function(input, output, session){
ns <- session$ns
output$mosaic <- plotly::renderPlotly({
if(input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
p <- dataset %>%
dplyr::select(HeadacheOnset) %>%
stats::na.omit() %>%
ggplot2::ggplot() +
geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
, fill= HeadacheOnset),
offset = 0.0075) +
#ggplot2::facet_wrap(~ .data[[input[['groupvar']]]] ,nrow = 1) +
ggplot2::theme_void() +
ggplot2::scale_fill_viridis_d() +
ggplot2::theme(legend.position = 'bottom') +
ggplot2::labs(fill = '')
plotly::ggplotly(p)
} else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
shiny::req(input[['grouponevar']])
p <- dataset %>%
dplyr::select(.data[[input[['grouponevar']]]],HeadacheOnset) %>%
stats::na.omit() %>%
ggplot2::ggplot() +
geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
, fill= HeadacheOnset,
conds = product(!!ggplot2::sym(input[['grouponevar']]))),
offset = 0.0075) +
#ggplot2::facet_wrap(~ .data[[input[['groupvar']]]] ,nrow = 1) +
ggplot2::theme_void() +
ggplot2::scale_fill_viridis_d() +
ggplot2::theme(legend.position = 'bottom') +
ggplot2::labs(fill = '') +
theme(axis.text.y = element_blank(),
axis.ticks.y=element_blank(),
axis.text.x = element_text(angle = 90),
legend.position = "right")
plotly::ggplotly(p)
# } else if (input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
# shiny::req(input[['grouptwovar']])
# p <- dataset %>%
# dplyr::select(.data[[input[['grouptwovar']]]],HeadacheOnset) %>%
# stats::na.omit() %>%
# ggplot2::ggplot() +
# geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
# , fill= HeadacheOnset),
# offset = 0.0075) +
# ggplot2::facet_wrap(~ .data[[input[['grouptwovar']]]] ,nrow = 1) +
# ggplot2::theme_void() +
# ggplot2::scale_fill_viridis_d() +
# ggplot2::theme(legend.position = 'bottom') +
# ggplot2::labs(fill = '')
#+
# theme(axis.text.y = element_blank(),
## axis.ticks.y=element_blank(),
# axis.text.x = element_text(angle = 90),
# legend.position = "right")
#plotly::ggplotly(p)
} else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
shiny::req(input[['grouponevar']])
shiny::req(input[['grouptwovar']])
p <- dataset %>%
dplyr::select(.data[[input[['grouponevar']]]],HeadacheOnset,.data[[input[['grouptwovar']]]]) %>%
stats::na.omit() %>%
ggplot2::ggplot() +
geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
, fill= HeadacheOnset,
conds = product(!!ggplot2::sym(input[['grouponevar']]))),
offset = 0.0075) +
ggplot2::facet_wrap(~ .data[[input[['grouptwovar']]]] ,nrow = 1) +
ggplot2::theme_void() +
ggplot2::scale_fill_viridis_d() +
ggplot2::theme(legend.position = 'bottom') +
ggplot2::labs(fill = '') +
theme(axis.text.y = element_blank(),
axis.ticks.y=element_blank(),
axis.text.x = element_text(angle = 90),
legend.position = "right")
plotly::ggplotly(p)
}
})
output$crosstab <- renderTable({
if(input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
table_one <- arsenal::tableby( arsenal::formulize(x = 'HeadacheOnset'),
data = dataset,
control = arsenal::tableby.control(
test = FALSE)
)
as.data.frame(summary(table_one,text = TRUE), text = "html")
} else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
shiny::req(input[['grouponevar']])
table_one <- arsenal::tableby( arsenal::formulize(y = input[['grouponevar']],
x = 'HeadacheOnset'),
data = dataset,
control = arsenal::tableby.control(
test = FALSE)
)
as.data.frame(summary(table_one,text = TRUE), text = "html")
} else if (input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
shiny::req(input[['grouptwovar']])
table_one <- arsenal::tableby( arsenal::formulize(x = 'HeadacheOnset'),
strata = eval(as.name(input[['grouptwovar']])),
data = dataset,
control = arsenal::tableby.control(
test = FALSE)
)
as.data.frame(summary(table_one,text = TRUE), text = "html")
} else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
shiny::req(input[['grouponevar']])
shiny::req(input[['grouptwovar']])
table_one <- arsenal::tableby( arsenal::formulize(y = input[['grouponevar']],
x = 'HeadacheOnset'),
data = dataset,
strata = eval(as.name(input[['grouptwovar']])),
control = arsenal::tableby.control(
test = FALSE)
)
as.data.frame(summary(table_one,text = TRUE), text = "html")
}
}, sanitize.text.function = function(x) x)
})
}
## To be copied in the UI
# mod_mosaic_ui("mosaic_ui_1")
## To be copied in the server
# mod_mosaic_server("mosaic_ui_1")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.