152 lines
3.9 KiB
R
152 lines
3.9 KiB
R
|
|
#' Create a apexcharts.js widget
|
|
#'
|
|
#' @param ax_opts A \code{list} in JSON format with chart parameters.
|
|
#' @param auto_update In Shiny application, update existing chart rather than generating new one.
|
|
#' @param width A numeric input in pixels.
|
|
#' @param height A numeric input in pixels.
|
|
#' @param elementId Use an explicit element ID for the widget.
|
|
#'
|
|
#' @return A \code{apexcharts} \code{htmlwidget} object.
|
|
#' @export
|
|
#'
|
|
#' @importFrom htmlwidgets createWidget sizingPolicy
|
|
#'
|
|
#' @examples
|
|
#'
|
|
#' library(apexcharter)
|
|
#'
|
|
#' # Use raw API by passing a list of
|
|
#' # parameters to the function
|
|
#'
|
|
#' apexchart(ax_opts = list(
|
|
#' chart = list(
|
|
#' type = "bar"
|
|
#' ),
|
|
#' series = list(list(
|
|
#' name = "Example",
|
|
#' data = sample(1:100, 5)
|
|
#' )),
|
|
#' xaxis = list(
|
|
#' categories = LETTERS[1:5]
|
|
#' )
|
|
#' ))
|
|
#'
|
|
#'
|
|
#' # Or use apexchart() to initialize the chart
|
|
#' # before passing parameters
|
|
#'
|
|
#' apexchart() %>%
|
|
#' ax_chart(type = "bar") %>%
|
|
#' ax_series(
|
|
#' list(
|
|
#' name = "Example",
|
|
#' data = sample(1:100, 5)
|
|
#' )
|
|
#' ) %>%
|
|
#' ax_xaxis(
|
|
#' categories = LETTERS[1:5]
|
|
#' )
|
|
#'
|
|
apexchart <- function(ax_opts = list(), auto_update = TRUE, width = NULL, height = NULL, elementId = NULL) {
|
|
|
|
# forward options using x
|
|
x <- list(
|
|
ax_opts = ax_opts,
|
|
auto_update = auto_update
|
|
)
|
|
|
|
# create widget
|
|
htmlwidgets::createWidget(
|
|
name = 'apexcharter',
|
|
x = x,
|
|
width = width,
|
|
height = height,
|
|
package = 'apexcharter',
|
|
elementId = elementId,
|
|
sizingPolicy = htmlwidgets::sizingPolicy(
|
|
defaultWidth = "100%",
|
|
defaultHeight = "100%",
|
|
viewer.defaultHeight = "100%",
|
|
viewer.defaultWidth = "100%",
|
|
knitr.figure = FALSE,
|
|
knitr.defaultWidth = "100%",
|
|
knitr.defaultHeight = "350px",
|
|
browser.fill = TRUE,
|
|
viewer.suppress = FALSE,
|
|
browser.external = TRUE,
|
|
padding = 20
|
|
)
|
|
)
|
|
}
|
|
|
|
#' @title Shiny bindings for apexcharter
|
|
#'
|
|
#' @description Output and render functions for using apexcharter within Shiny
|
|
#' applications and interactive Rmd documents.
|
|
#'
|
|
#' @param outputId output variable to read from
|
|
#' @param width,height Must be a valid CSS unit (like \code{'100\%'},
|
|
#' \code{'400px'}, \code{'auto'}) or a number, which will be coerced to a
|
|
#' string and have \code{'px'} appended.
|
|
#' @param expr An expression that generates a apexcharter
|
|
#' @param env The environment in which to evaluate \code{expr}.
|
|
#' @param quoted Is \code{expr} a quoted expression (with \code{quote()})? This
|
|
#' is useful if you want to save an expression in a variable.
|
|
#'
|
|
#' @return An Apexchart output that can be included in the application UI.
|
|
#'
|
|
#' @name apexcharter-shiny
|
|
#'
|
|
#' @export
|
|
#'
|
|
#' @importFrom htmlwidgets shinyWidgetOutput shinyRenderWidget
|
|
#'
|
|
#' @examples
|
|
#'
|
|
#' if (interactive()) {
|
|
#' library(shiny)
|
|
#'
|
|
#' ui <- fluidPage(
|
|
#' fluidRow(
|
|
#' column(
|
|
#' width = 8, offset = 2,
|
|
#' tags$h2("Apexchart in Shiny"),
|
|
#' actionButton("redraw", "Redraw chart"),
|
|
#' apexchartOutput("chart")
|
|
#' )
|
|
#' )
|
|
#' )
|
|
#'
|
|
#' server <- function(input, output, session) {
|
|
#'
|
|
#' output$chart <- renderApexchart({
|
|
#' input$redraw
|
|
#' apexchart() %>%
|
|
#' ax_chart(type = "bar") %>%
|
|
#' ax_series(
|
|
#' list(
|
|
#' name = "Example",
|
|
#' data = sample(1:100, 5)
|
|
#' )
|
|
#' ) %>%
|
|
#' ax_xaxis(
|
|
#' categories = LETTERS[1:5]
|
|
#' )
|
|
#' })
|
|
#'
|
|
#' }
|
|
#'
|
|
#' shinyApp(ui, server)
|
|
#' }
|
|
apexchartOutput <- function(outputId, width = '100%', height = '400px'){
|
|
htmlwidgets::shinyWidgetOutput(outputId, 'apexcharter', width, height, package = 'apexcharter')
|
|
}
|
|
|
|
#' @rdname apexcharter-shiny
|
|
#' @export
|
|
renderApexchart <- function(expr, env = parent.frame(), quoted = FALSE) {
|
|
if (!quoted) { expr <- substitute(expr) } # force quoted
|
|
htmlwidgets::shinyRenderWidget(expr, apexchartOutput, env, quoted = TRUE)
|
|
}
|