apexcharter/R/apex-options.R

422 lines
12 KiB
R

# ApexCharts options ------------------------------------------------------
#' Events options
#'
#' @param click Fires when user clicks on any area of the chart.
#' @param beforeMount Fires before the chart has been drawn on screen.
#' @param mounted Fires after the chart has been drawn on screen.
#' @param updated Fires when the chart has been dynamically updated.
#' @param legendClick Fires when user clicks on legend.
#' @param selection Fires when user selects rect using the selection tool.
#' @param dataPointSelection Fires when user clicks on a datapoint (bar/column/marker/bubble/donut-slice).
#' @param dataPointMouseEnter Fires when user's mouse enter on a datapoint (bar/column/marker/bubble/donut-slice).
#' @param dataPointMouseLeave MouseLeave event for a datapoint (bar/column/marker/bubble/donut-slice).
#' @param beforeZoom This function, if defined, runs just before zooming in/out of the chart allowing you to set a custom range for zooming in/out.
#' @param zoomed Fires when user zooms in/out the chart using either the selection zooming tool or zoom in/out buttons.
#' @param scrolled Fires when user scrolls using the pan tool.
#' @param ... Additional parameters.
#'
#' @note All arguments should be JavaScript function defined with \code{htmlwidgets::JS}.
#'
#' @return A \code{list} of options that can be used in \code{\link{ax_chart}}.
#'
#' @note See \url{https://apexcharts.com/docs/options/chart/events/}.
#'
#' @export
#'
#' @examples
#'
#' if (interactive()) {
#' library(shiny)
#'
#' ui <- fluidPage(
#' fluidRow(
#' column(
#' width = 8, offset = 2,
#' tags$h2("Apexchart in Shiny"),
#' apexchartOutput("chart"),
#' verbatimTextOutput(outputId = "res_click")
#' )
#' )
#' )
#'
#' server <- function(input, output, session) {
#'
#' output$chart <- renderApexchart({
#' apexchart() %>%
#' ax_chart(
#' type = "bar",
#' events = events_opts(
#' dataPointSelection = JS(
#' "function(event, chartContext, config) {
#' Shiny.setInputValue('click', config.selectedDataPoints)
#' }"
#' )
#' )
#' ) %>%
#' ax_series(
#' list(
#' name = "Example",
#' data = sample(1:100, 5)
#' )
#' ) %>%
#' ax_xaxis(
#' categories = LETTERS[1:5]
#' )
#' })
#'
#' output$res_click <- renderPrint({
#' input$click
#' })
#' }
#'
#' shinyApp(ui, server)
#' }
events_opts <- function(click = NULL,
beforeMount = NULL,
mounted = NULL,
updated = NULL,
legendClick = NULL,
selection = NULL,
dataPointSelection = NULL,
dataPointMouseEnter = NULL,
dataPointMouseLeave = NULL,
beforeZoom = NULL,
zoomed = NULL,
scrolled = NULL,
...) {
dropNulls(
list(
click = click,
beforeMount = beforeMount,
mounted = mounted,
updated = updated,
legendClick = legendClick,
selection = selection,
dataPointSelection = dataPointSelection,
dataPointMouseEnter = dataPointMouseEnter,
dataPointMouseLeave = dataPointMouseLeave,
beforeZoom = beforeZoom,
zoomed = zoomed,
scrolled = scrolled,
...
)
)
}
#' @title Bar options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param horizontal Logical. This option will turn a column chart into a horizontal bar chart.
#' @param endingShape Available Options: \code{"flat"} or \code{"rounded"}.
#' @param columnWidth In column charts, columnWidth is the percentage of the available width in the grid-rect.
#' @param barHeight In horizontal bar charts, barHeight is the percentage of the available height in the grid-rect.
#' @param distributed Logical. Turn this option to make the bars discrete. Each value indicates one bar per series.
#' @param colors A list of parameters.
#' @param dataLabels List with fields \code{position} (available options: \code{"top"}, \code{"center"} or \code{"bottom"})
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/bar/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#'
#' @export
#'
#' @examples
#'
#' data("mpg", package = "ggplot2")
#'
#' apex(mpg, aes(manufacturer)) %>%
#' ax_plotOptions(
#' bar = bar_opts(
#' endingShape = "rounded",
#' columnWidth = 100,
#' distributed = TRUE
#' )
#' )
#'
bar_opts <- function(horizontal = NULL,
endingShape = NULL,
columnWidth = NULL,
barHeight = NULL,
distributed = NULL,
colors = NULL,
dataLabels = NULL,
...) {
dropNulls(
list(
horizontal = horizontal,
endingShape = endingShape,
columnWidth = columnWidth,
barHeight = barHeight,
distributed = distributed,
colors = colors,
dataLabels = dataLabels,
...
)
)
}
#' @title Heatmap options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param radius Numeric. Radius of the rectangle inside heatmap.
#' @param enableShades Logical. Enable different shades of color depending on the value
#' @param shadeIntensity Numeric \code{[0,1]}. The intensity of the shades generated for each value.
#' @param colorScale List.
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/heatmap/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#'
#' @export
#'
#' @examples
#'
#' df <- expand.grid(
#' month = month.name,
#' person = c("Obi-Wan", "Luke", "Anakin", "Leia")
#' )
#' df$value <- sample(0:1, nrow(df), TRUE)
#'
#' apex(
#' data = df,
#' mapping = aes(x = month, y = person, fill = value),
#' type = "heatmap"
#' ) %>%
#' ax_plotOptions(
#' heatmap = heatmap_opts(
#' enableShades = FALSE,
#' colorScale = list(
#' ranges = list(
#' list(from = 0, to = 0.5, color = "#FF0000"),
#' list(from = 0.5, to = 1, color = "#088A08")
#' )
#' )
#' )
#' )
#'
heatmap_opts <- function(radius = NULL,
enableShades = NULL,
shadeIntensity = NULL,
colorScale = NULL,
...) {
dropNulls(
list(
radius = radius,
enableShades = enableShades,
shadeIntensity = shadeIntensity,
colorScale = colorScale,
...
)
)
}
#' @title Radial bar options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param size Numeric. Manual size of the radialBars instead of calculating automatically from default height / width.
#' @param inverseOrder Logical. Whether to make the first value of series innermost or outermost.
#' @param startAngle Numeric. Angle from which the radialBars should start.
#' @param endAngle Numeric. Angle to which the radialBars should end. The sum of the startAngle and endAngle should not exceed 360.
#' @param offsetX Numeric. Sets the left offset for radialBars.
#' @param offsetY Numeric. Sets the top offset for radialBars.
#' @param hollow List.
#' @param track List.
#' @param dataLabels List.
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/radialbar/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#'
#' @export
#'
#' @examples
#' apexchart() %>%
#' ax_chart(type = "radialBar") %>%
#' ax_plotOptions(
#' radialBar = radialBar_opts(
#' startAngle = -135,
#' endAngle = 135,
#' dataLabels = list(
#' name = list(
#' fontSize = "16px",
#' # color = undefined,
#' offsetY = 120
#' ),
#' value = list(
#' offsetY = 76,
#' fontSize = "22px",
#' # color = undefined,
#' formatter = htmlwidgets::JS("function (val) {return val + '%';}")
#' )
#' )
#' )
#' ) %>%
#' ax_stroke(dashArray = 4) %>%
#' ax_series(70) %>%
#' ax_labels("Indicator")
radialBar_opts <- function(size = NULL,
inverseOrder = NULL,
startAngle = NULL,
endAngle = NULL,
offsetX = NULL,
offsetY = NULL,
hollow = NULL,
track = NULL,
dataLabels = NULL,
...) {
dropNulls(
list(
size = size,
inverseOrder = inverseOrder,
startAngle = startAngle,
endAngle = endAngle,
offsetX = offsetX,
offsetY = offsetY,
hollow = hollow,
track = track,
dataLabels = dataLabels,
...
)
)
}
#' @title Pie options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param size Numeric. Custom size of the pie which will override the default size calculations.
#' @param donut List with two fields \code{size} (Donut / ring size in percentage relative to the total pie area.)
#' and \code{background} (The background color of the pie).
#' @param customScale Numeric. Transform the scale of whole pie/donut overriding the default calculations.
#' @param offsetX Numeric. Sets the left offset of the whole pie area.
#' @param offsetY Numeric. Sets the top offset of the whole pie area.
#' @param dataLabels List with field \code{offset} (Numeric, Offset by which labels will move outside / inside of the donut area)
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/pie/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#'
#' @export
#'
#' @examples
#' data("mpg", package = "ggplot2")
#'
#' apex(mpg, aes(cyl), type = "donut") %>%
#' ax_plotOptions(
#' pie = pie_opts(
#' donut = list(size = "90%", background = "#BABABA")
#' )
#' )
pie_opts <- function(size = NULL,
donut = NULL,
customScale = NULL,
offsetX = NULL,
offsetY = NULL,
dataLabels = NULL,
...) {
dropNulls(
list(
size = size,
donut = donut,
customScale = customScale,
offsetX = offsetX,
offsetY = offsetY,
dataLabels = dataLabels,
...
)
)
}
#' @title Bubble options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param minBubbleRadius Minimum radius size of a bubble.
#' If a bubble value is too small to be displayed, this size will be used.
#' @param maxBubbleRadius Maximum radius size of a bubble.
#' If a bubble value is too large to cover the chart, this size will be used.
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/bubble/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#' @export
#'
#' @examples
#' apex(
#' data = mtcars,
#' type = "scatter",
#' mapping = aes(x = wt, y = mpg, z = qsec)
#' ) %>%
#' ax_plotOptions(
#' bubble = bubble_opts(
#' minBubbleRadius = 1,
#' maxBubbleRadius = 20
#' )
#' )
bubble_opts <- function(minBubbleRadius, maxBubbleRadius, ...) {
dropNulls(
list(
minBubbleRadius = minBubbleRadius,
maxBubbleRadius = maxBubbleRadius,
...
)
)
}
#' @title Boxplot options
#'
#' @description Use these options in [ax_plotOptions()].
#'
#' @param color.upper Color for the upper quartile (Q3 to median) of the box plot.
#' @param color.lower Color for the lower quartile (median to Q1) of the box plot.
#' @param ... Additional parameters.
#'
#' @note See \url{https://apexcharts.com/docs/options/plotoptions/boxplot/}.
#'
#' @return A \code{list} of options that can be used in [ax_plotOptions()].
#' @export
#'
#' @examples
#' data("mpg", package = "ggplot2")
#' apex(mpg, aes(class, hwy), "boxplot") %>%
#' ax_plotOptions(
#' boxPlot = boxplot_opts(color.upper = "#848484", color.lower = "#848484" )
#' )
boxplot_opts <- function(color.upper, color.lower, ...) {
dropNulls(
list(
colors = dropNulls(list(
upper = color.upper,
lower = color.lower
)),
...
)
)
}