R/jjtreemap.h.R

Defines functions jjtreemap

Documented in jjtreemap

# This file is automatically generated, you probably don't want to edit this

jjtreemapOptions <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "jjtreemapOptions",
    inherit = jmvcore::Options,
    public = list(
        initialize = function(
            group = NULL,
            size = NULL,
            color = NULL,
            aspectRatio = 1.67,
            borderWidth = 0.7,
            labelLevel1Size = 15,
            labelLevel2Size = 12,
            labelLevel1Color = "white",
            labelLevel2Color = "black",
            labelFontFace = "normal",
            labelBackground = "transparent",
            labelAlignH = "center",
            labelAlignV = "center",
            labelOverlap = 0.5,
            title = "",
            subtitle = "",
            caption = "", ...) {

            super$initialize(
                package="ClinicoPath",
                name="jjtreemap",
                requiresData=TRUE,
                ...)

            private$..group <- jmvcore::OptionVariable$new(
                "group",
                group,
                suggested=list(
                    "nominal",
                    "ordinal"),
                permitted=list(
                    "factor"))
            private$..size <- jmvcore::OptionVariable$new(
                "size",
                size,
                suggested=list(
                    "continuous"),
                permitted=list(
                    "numeric"))
            private$..color <- jmvcore::OptionVariable$new(
                "color",
                color,
                suggested=list(
                    "nominal",
                    "ordinal"),
                permitted=list(
                    "factor"))
            private$..aspectRatio <- jmvcore::OptionNumber$new(
                "aspectRatio",
                aspectRatio,
                default=1.67)
            private$..borderWidth <- jmvcore::OptionNumber$new(
                "borderWidth",
                borderWidth,
                default=0.7)
            private$..labelLevel1Size <- jmvcore::OptionNumber$new(
                "labelLevel1Size",
                labelLevel1Size,
                default=15)
            private$..labelLevel2Size <- jmvcore::OptionNumber$new(
                "labelLevel2Size",
                labelLevel2Size,
                default=12)
            private$..labelLevel1Color <- jmvcore::OptionString$new(
                "labelLevel1Color",
                labelLevel1Color,
                default="white")
            private$..labelLevel2Color <- jmvcore::OptionString$new(
                "labelLevel2Color",
                labelLevel2Color,
                default="black")
            private$..labelFontFace <- jmvcore::OptionList$new(
                "labelFontFace",
                labelFontFace,
                options=list(
                    "normal",
                    "bold",
                    "italic",
                    "bolditalic"),
                default="normal")
            private$..labelBackground <- jmvcore::OptionString$new(
                "labelBackground",
                labelBackground,
                default="transparent")
            private$..labelAlignH <- jmvcore::OptionList$new(
                "labelAlignH",
                labelAlignH,
                options=list(
                    "left",
                    "center",
                    "right"),
                default="center")
            private$..labelAlignV <- jmvcore::OptionList$new(
                "labelAlignV",
                labelAlignV,
                options=list(
                    "top",
                    "center",
                    "bottom"),
                default="center")
            private$..labelOverlap <- jmvcore::OptionNumber$new(
                "labelOverlap",
                labelOverlap,
                default=0.5)
            private$..title <- jmvcore::OptionString$new(
                "title",
                title,
                default="")
            private$..subtitle <- jmvcore::OptionString$new(
                "subtitle",
                subtitle,
                default="")
            private$..caption <- jmvcore::OptionString$new(
                "caption",
                caption,
                default="")

            self$.addOption(private$..group)
            self$.addOption(private$..size)
            self$.addOption(private$..color)
            self$.addOption(private$..aspectRatio)
            self$.addOption(private$..borderWidth)
            self$.addOption(private$..labelLevel1Size)
            self$.addOption(private$..labelLevel2Size)
            self$.addOption(private$..labelLevel1Color)
            self$.addOption(private$..labelLevel2Color)
            self$.addOption(private$..labelFontFace)
            self$.addOption(private$..labelBackground)
            self$.addOption(private$..labelAlignH)
            self$.addOption(private$..labelAlignV)
            self$.addOption(private$..labelOverlap)
            self$.addOption(private$..title)
            self$.addOption(private$..subtitle)
            self$.addOption(private$..caption)
        }),
    active = list(
        group = function() private$..group$value,
        size = function() private$..size$value,
        color = function() private$..color$value,
        aspectRatio = function() private$..aspectRatio$value,
        borderWidth = function() private$..borderWidth$value,
        labelLevel1Size = function() private$..labelLevel1Size$value,
        labelLevel2Size = function() private$..labelLevel2Size$value,
        labelLevel1Color = function() private$..labelLevel1Color$value,
        labelLevel2Color = function() private$..labelLevel2Color$value,
        labelFontFace = function() private$..labelFontFace$value,
        labelBackground = function() private$..labelBackground$value,
        labelAlignH = function() private$..labelAlignH$value,
        labelAlignV = function() private$..labelAlignV$value,
        labelOverlap = function() private$..labelOverlap$value,
        title = function() private$..title$value,
        subtitle = function() private$..subtitle$value,
        caption = function() private$..caption$value),
    private = list(
        ..group = NA,
        ..size = NA,
        ..color = NA,
        ..aspectRatio = NA,
        ..borderWidth = NA,
        ..labelLevel1Size = NA,
        ..labelLevel2Size = NA,
        ..labelLevel1Color = NA,
        ..labelLevel2Color = NA,
        ..labelFontFace = NA,
        ..labelBackground = NA,
        ..labelAlignH = NA,
        ..labelAlignV = NA,
        ..labelOverlap = NA,
        ..title = NA,
        ..subtitle = NA,
        ..caption = NA)
)

jjtreemapResults <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "jjtreemapResults",
    inherit = jmvcore::Group,
    active = list(
        todo = function() private$.items[["todo"]],
        plot = function() private$.items[["plot"]]),
    private = list(),
    public=list(
        initialize=function(options) {
            super$initialize(
                options=options,
                name="",
                title="Treemap",
                refs=list(
                    "ggplot2",
                    "treemap",
                    "ggfittext",
                    "dplyr",
                    "tibble",
                    "ClinicoPathJamoviModule"),
                clearWith=list(
                    "group",
                    "size",
                    "color",
                    "aspectRatio",
                    "borderLevel1Width",
                    "borderLevel2Width",
                    "borderLevel1Color",
                    "borderLevel2Color",
                    "labelLevel1Size",
                    "labelLevel2Size",
                    "labelLevel1Color",
                    "labelLevel2Color",
                    "labelFontFace",
                    "labelBackground",
                    "labelOverlap",
                    "labelAlignH",
                    "labelAlignV",
                    "title",
                    "subtitle",
                    "caption"))
            self$add(jmvcore::Html$new(
                options=options,
                name="todo",
                title="To Do"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plot",
                title="Treemap",
                renderFun=".plot",
                requiresData=TRUE))}))

jjtreemapBase <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "jjtreemapBase",
    inherit = jmvcore::Analysis,
    public = list(
        initialize = function(options, data=NULL, datasetId="", analysisId="", revision=0) {
            super$initialize(
                package = "ClinicoPath",
                name = "jjtreemap",
                version = c(1,0,0),
                options = options,
                results = jjtreemapResults$new(options=options),
                data = data,
                datasetId = datasetId,
                analysisId = analysisId,
                revision = revision,
                pause = NULL,
                completeWhenFilled = FALSE,
                requiresMissings = FALSE,
                weightsSupport = 'auto')
        }))

#' Treemap
#'
#' 'Creates treemap visualizations for categorical data'
#' 
#'
#' @examples
#' \donttest{
#' # example will be added
#'}
#' @param data The data as a data frame.
#' @param group .
#' @param size .
#' @param color .
#' @param aspectRatio .
#' @param borderWidth .
#' @param labelLevel1Size .
#' @param labelLevel2Size .
#' @param labelLevel1Color .
#' @param labelLevel2Color .
#' @param labelFontFace .
#' @param labelBackground .
#' @param labelAlignH .
#' @param labelAlignV .
#' @param labelOverlap .
#' @param title .
#' @param subtitle .
#' @param caption .
#' @return A results object containing:
#' \tabular{llllll}{
#'   \code{results$todo} \tab \tab \tab \tab \tab a html \cr
#'   \code{results$plot} \tab \tab \tab \tab \tab an image \cr
#' }
#'
#' @export
jjtreemap <- function(
    data,
    group,
    size,
    color,
    aspectRatio = 1.67,
    borderWidth = 0.7,
    labelLevel1Size = 15,
    labelLevel2Size = 12,
    labelLevel1Color = "white",
    labelLevel2Color = "black",
    labelFontFace = "normal",
    labelBackground = "transparent",
    labelAlignH = "center",
    labelAlignV = "center",
    labelOverlap = 0.5,
    title = "",
    subtitle = "",
    caption = "") {

    if ( ! requireNamespace("jmvcore", quietly=TRUE))
        stop("jjtreemap requires jmvcore to be installed (restart may be required)")

    if ( ! missing(group)) group <- jmvcore::resolveQuo(jmvcore::enquo(group))
    if ( ! missing(size)) size <- jmvcore::resolveQuo(jmvcore::enquo(size))
    if ( ! missing(color)) color <- jmvcore::resolveQuo(jmvcore::enquo(color))
    if (missing(data))
        data <- jmvcore::marshalData(
            parent.frame(),
            `if`( ! missing(group), group, NULL),
            `if`( ! missing(size), size, NULL),
            `if`( ! missing(color), color, NULL))

    for (v in group) if (v %in% names(data)) data[[v]] <- as.factor(data[[v]])
    for (v in color) if (v %in% names(data)) data[[v]] <- as.factor(data[[v]])

    options <- jjtreemapOptions$new(
        group = group,
        size = size,
        color = color,
        aspectRatio = aspectRatio,
        borderWidth = borderWidth,
        labelLevel1Size = labelLevel1Size,
        labelLevel2Size = labelLevel2Size,
        labelLevel1Color = labelLevel1Color,
        labelLevel2Color = labelLevel2Color,
        labelFontFace = labelFontFace,
        labelBackground = labelBackground,
        labelAlignH = labelAlignH,
        labelAlignV = labelAlignV,
        labelOverlap = labelOverlap,
        title = title,
        subtitle = subtitle,
        caption = caption)

    analysis <- jjtreemapClass$new(
        options = options,
        data = data)

    analysis$run()

    analysis$results
}
sbalci/ClinicoPathJamoviModule documentation built on Feb. 25, 2025, 6:34 a.m.