grid: shiny & markdown method
This commit is contained in:
parent
901e67494d
commit
90aac1901b
|
@ -20,6 +20,7 @@ export(apexchart)
|
||||||
export(apexchartOutput)
|
export(apexchartOutput)
|
||||||
export(apexchartProxy)
|
export(apexchartProxy)
|
||||||
export(apexfacetOutput)
|
export(apexfacetOutput)
|
||||||
|
export(apexgridOutput)
|
||||||
export(ax_annotations)
|
export(ax_annotations)
|
||||||
export(ax_chart)
|
export(ax_chart)
|
||||||
export(ax_colors)
|
export(ax_colors)
|
||||||
|
@ -63,6 +64,7 @@ export(pie_opts)
|
||||||
export(radialBar_opts)
|
export(radialBar_opts)
|
||||||
export(renderApexchart)
|
export(renderApexchart)
|
||||||
export(renderApexfacet)
|
export(renderApexfacet)
|
||||||
|
export(renderApexgrid)
|
||||||
export(renderSparkBox)
|
export(renderSparkBox)
|
||||||
export(run_demo_input)
|
export(run_demo_input)
|
||||||
export(run_demo_sparkbox)
|
export(run_demo_sparkbox)
|
||||||
|
|
|
@ -219,7 +219,7 @@ apexfacetOutput <- function(outputId) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#' @param expr An expression that generates a apexcharter
|
#' @param expr An expression that generates a apexcharter facet.
|
||||||
#' @param env The environment in which to evaluate \code{expr}.
|
#' @param env The environment in which to evaluate \code{expr}.
|
||||||
#' @param quoted Is \code{expr} a quoted expression (with \code{quote()})? This
|
#' @param quoted Is \code{expr} a quoted expression (with \code{quote()})? This
|
||||||
#' is useful if you want to save an expression in a variable.
|
#' is useful if you want to save an expression in a variable.
|
||||||
|
|
76
R/grid.R
76
R/grid.R
|
@ -98,6 +98,82 @@ apex_grid <- function(...,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Shiny -------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#' @title Shiny bindings for grid with apexcharter
|
||||||
|
#'
|
||||||
|
#' @description Output and render functions for using apexcharter grid within Shiny
|
||||||
|
#' applications and interactive Rmd documents.
|
||||||
|
#'
|
||||||
|
#' @param outputId output variable to read from
|
||||||
|
#'
|
||||||
|
#' @return An Apexcharts output that can be included in the application UI.
|
||||||
|
#' @export
|
||||||
|
#'
|
||||||
|
#' @name apexcharter-shiny-grid
|
||||||
|
#'
|
||||||
|
#' @importFrom htmltools tagList
|
||||||
|
#' @importFrom shiny uiOutput
|
||||||
|
#' @importFrom htmlwidgets getDependency
|
||||||
|
#'
|
||||||
|
#' @example examples/grid-shiny.R
|
||||||
|
apexgridOutput <- function(outputId) {
|
||||||
|
tagList(
|
||||||
|
uiOutput(outputId = outputId),
|
||||||
|
getDependency(name = "apexcharter", package = "apexcharter")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @param expr An expression that generates a apexcharter grid.
|
||||||
|
#' @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.
|
||||||
|
#'
|
||||||
|
#' @export
|
||||||
|
#'
|
||||||
|
#' @rdname apexcharter-shiny-grid
|
||||||
|
#'
|
||||||
|
#' @importFrom shiny exprToFunction createRenderFunction createWebDependency
|
||||||
|
#' @importFrom htmltools renderTags resolveDependencies
|
||||||
|
renderApexgrid <- function(expr, env = parent.frame(), quoted = FALSE) {
|
||||||
|
func <- exprToFunction(expr, env, quoted)
|
||||||
|
createRenderFunction(
|
||||||
|
func = func,
|
||||||
|
transform = function(result, shinysession, name, ...) {
|
||||||
|
if (is.null(result) || length(result) == 0)
|
||||||
|
return(NULL)
|
||||||
|
if (!inherits(result, "apex_grid")) {
|
||||||
|
stop(
|
||||||
|
"renderApexgrid: 'expr' must return an apexcharter grid object.",
|
||||||
|
call. = FALSE
|
||||||
|
)
|
||||||
|
}
|
||||||
|
TAG <- build_grid(
|
||||||
|
result$content,
|
||||||
|
nrow = result$nrow,
|
||||||
|
ncol = result$ncol,
|
||||||
|
col_gap = result$col_gap,
|
||||||
|
row_gap = result$row_gap,
|
||||||
|
height = result$height,
|
||||||
|
width = result$width
|
||||||
|
)
|
||||||
|
rendered <- renderTags(TAG)
|
||||||
|
deps <- lapply(
|
||||||
|
X = resolveDependencies(rendered$dependencies),
|
||||||
|
FUN = createWebDependency
|
||||||
|
)
|
||||||
|
list(
|
||||||
|
html = rendered$html,
|
||||||
|
deps = deps
|
||||||
|
)
|
||||||
|
}, apexgridOutput, list()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Print methods -----------------------------------------------------------
|
# Print methods -----------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -36,4 +36,5 @@
|
||||||
}
|
}
|
||||||
}, force = TRUE)
|
}, force = TRUE)
|
||||||
register_s3_method("knitr", "knit_print", "apex_facet")
|
register_s3_method("knitr", "knit_print", "apex_facet")
|
||||||
|
register_s3_method("knitr", "knit_print", "apex_grid")
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,21 +2,15 @@ library(apexcharter)
|
||||||
data("mpg", package = "ggplot2")
|
data("mpg", package = "ggplot2")
|
||||||
|
|
||||||
# Two chart side-by-side
|
# Two chart side-by-side
|
||||||
a1 <- mpg %>%
|
a1 <- apex(mpg, aes(manufacturer), type = "bar")
|
||||||
dplyr::count(manufacturer) %>%
|
|
||||||
apex(aes(manufacturer, n), type = "bar")
|
|
||||||
|
|
||||||
a2 <- mpg %>%
|
a2 <- apex(mpg, aes(trans), type = "column")
|
||||||
dplyr::count(trans) %>%
|
|
||||||
apex(aes(trans, n), type = "column")
|
|
||||||
|
|
||||||
apex_grid(a1, a2, height = "400px")
|
apex_grid(a1, a2, height = "400px")
|
||||||
|
|
||||||
|
|
||||||
# More complex layout:
|
# More complex layout:
|
||||||
a3 <- mpg %>%
|
a3 <- apex(mpg, aes(drv), type = "pie")
|
||||||
dplyr::count(drv) %>%
|
|
||||||
apex(aes(drv, n), type = "pie")
|
|
||||||
|
|
||||||
apex_grid(
|
apex_grid(
|
||||||
a1, a2, a3,
|
a1, a2, a3,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
|
|
||||||
library(shiny)
|
library(shiny)
|
||||||
library(htmltools)
|
|
||||||
library(apexcharter)
|
library(apexcharter)
|
||||||
|
|
||||||
data("unhcr_ts")
|
data("unhcr_ts")
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
library(shiny)
|
||||||
|
library(apexcharter)
|
||||||
|
|
||||||
|
ui <- fluidPage(
|
||||||
|
|
||||||
|
tags$h2("Apexcharts Grid Example"),
|
||||||
|
|
||||||
|
apexgridOutput("myfacet")
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
server <- function(input, output, session) {
|
||||||
|
|
||||||
|
output$myfacet <- renderApexgrid({
|
||||||
|
a1 <- apex(mpg, aes(manufacturer), type = "bar")
|
||||||
|
a2 <- apex(mpg, aes(trans), type = "column")
|
||||||
|
a3 <- apex(mpg, aes(drv), type = "pie")
|
||||||
|
|
||||||
|
apex_grid(
|
||||||
|
a1, a2, a3,
|
||||||
|
grid_area = c("1 / 1 / 3 / 2", "1 / 2 / 2 / 4", "2 / 2 / 3 / 4"),
|
||||||
|
ncol = 3,
|
||||||
|
nrow = 2,
|
||||||
|
height = "600px"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interactive())
|
||||||
|
shinyApp(ui, server)
|
|
@ -44,21 +44,15 @@ library(apexcharter)
|
||||||
data("mpg", package = "ggplot2")
|
data("mpg", package = "ggplot2")
|
||||||
|
|
||||||
# Two chart side-by-side
|
# Two chart side-by-side
|
||||||
a1 <- mpg \%>\%
|
a1 <- apex(mpg, aes(manufacturer), type = "bar")
|
||||||
dplyr::count(manufacturer) \%>\%
|
|
||||||
apex(aes(manufacturer, n), type = "bar")
|
|
||||||
|
|
||||||
a2 <- mpg \%>\%
|
a2 <- apex(mpg, aes(trans), type = "column")
|
||||||
dplyr::count(trans) \%>\%
|
|
||||||
apex(aes(trans, n), type = "column")
|
|
||||||
|
|
||||||
apex_grid(a1, a2, height = "400px")
|
apex_grid(a1, a2, height = "400px")
|
||||||
|
|
||||||
|
|
||||||
# More complex layout:
|
# More complex layout:
|
||||||
a3 <- mpg \%>\%
|
a3 <- apex(mpg, aes(drv), type = "pie")
|
||||||
dplyr::count(drv) \%>\%
|
|
||||||
apex(aes(drv, n), type = "pie")
|
|
||||||
|
|
||||||
apex_grid(
|
apex_grid(
|
||||||
a1, a2, a3,
|
a1, a2, a3,
|
||||||
|
|
|
@ -13,7 +13,7 @@ renderApexfacet(expr, env = parent.frame(), quoted = FALSE)
|
||||||
\arguments{
|
\arguments{
|
||||||
\item{outputId}{output variable to read from}
|
\item{outputId}{output variable to read from}
|
||||||
|
|
||||||
\item{expr}{An expression that generates a apexcharter}
|
\item{expr}{An expression that generates a apexcharter facet.}
|
||||||
|
|
||||||
\item{env}{The environment in which to evaluate \code{expr}.}
|
\item{env}{The environment in which to evaluate \code{expr}.}
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ applications and interactive Rmd documents.
|
||||||
\examples{
|
\examples{
|
||||||
|
|
||||||
library(shiny)
|
library(shiny)
|
||||||
library(htmltools)
|
|
||||||
library(apexcharter)
|
library(apexcharter)
|
||||||
|
|
||||||
data("unhcr_ts")
|
data("unhcr_ts")
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/grid.R
|
||||||
|
\name{apexcharter-shiny-grid}
|
||||||
|
\alias{apexcharter-shiny-grid}
|
||||||
|
\alias{apexgridOutput}
|
||||||
|
\alias{renderApexgrid}
|
||||||
|
\title{Shiny bindings for grid with apexcharter}
|
||||||
|
\usage{
|
||||||
|
apexgridOutput(outputId)
|
||||||
|
|
||||||
|
renderApexgrid(expr, env = parent.frame(), quoted = FALSE)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{outputId}{output variable to read from}
|
||||||
|
|
||||||
|
\item{expr}{An expression that generates a apexcharter grid.}
|
||||||
|
|
||||||
|
\item{env}{The environment in which to evaluate \code{expr}.}
|
||||||
|
|
||||||
|
\item{quoted}{Is \code{expr} a quoted expression (with \code{quote()})? This
|
||||||
|
is useful if you want to save an expression in a variable.}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
An Apexcharts output that can be included in the application UI.
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Output and render functions for using apexcharter grid within Shiny
|
||||||
|
applications and interactive Rmd documents.
|
||||||
|
}
|
||||||
|
\examples{
|
||||||
|
|
||||||
|
library(shiny)
|
||||||
|
library(apexcharter)
|
||||||
|
|
||||||
|
ui <- fluidPage(
|
||||||
|
|
||||||
|
tags$h2("Apexcharts Grid Example"),
|
||||||
|
|
||||||
|
apexgridOutput("myfacet")
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
server <- function(input, output, session) {
|
||||||
|
|
||||||
|
output$myfacet <- renderApexgrid({
|
||||||
|
a1 <- apex(mpg, aes(manufacturer), type = "bar")
|
||||||
|
a2 <- apex(mpg, aes(trans), type = "column")
|
||||||
|
a3 <- apex(mpg, aes(drv), type = "pie")
|
||||||
|
|
||||||
|
apex_grid(
|
||||||
|
a1, a2, a3,
|
||||||
|
grid_area = c("1 / 1 / 3 / 2", "1 / 2 / 2 / 4", "2 / 2 / 3 / 4"),
|
||||||
|
ncol = 3,
|
||||||
|
nrow = 2,
|
||||||
|
height = "600px"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interactive())
|
||||||
|
shinyApp(ui, server)
|
||||||
|
}
|
|
@ -65,5 +65,28 @@ apex(refugees, aes(date, n), type = "line", synchronize = "sync-it") %>%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Grid
|
||||||
|
|
||||||
|
You can construct a grid of (unrelated) charts with `apex_grid()`, construct your charts independently then assemble them in the grid:
|
||||||
|
|
||||||
|
```{r}
|
||||||
|
a1 <- apex(mpg, aes(manufacturer), type = "bar")
|
||||||
|
a2 <- apex(mpg, aes(trans), type = "column")
|
||||||
|
a3 <- apex(mpg, aes(drv), type = "pie")
|
||||||
|
|
||||||
|
apex_grid(
|
||||||
|
a1, a2, a3,
|
||||||
|
grid_area = c("1 / 1 / 3 / 2", "1 / 2 / 2 / 4", "2 / 2 / 3 / 4"),
|
||||||
|
ncol = 3,
|
||||||
|
nrow = 2,
|
||||||
|
height = "600px"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
`grid_area` argument allow to specify space occupied by each chart, you can generate interactively your grid template [here](https://cssgrid-generator.netlify.app/).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue