Initial commit
This commit is contained in:
commit
db0f6b4fa4
|
@ -0,0 +1,3 @@
|
||||||
|
^apexcharter\.Rproj$
|
||||||
|
^\.Rproj\.user$
|
||||||
|
^dev$
|
|
@ -0,0 +1,4 @@
|
||||||
|
.Rproj.user
|
||||||
|
.Rhistory
|
||||||
|
.RData
|
||||||
|
*.Rproj
|
|
@ -0,0 +1,17 @@
|
||||||
|
Package: apexcharter
|
||||||
|
Version: 0.0.0.9000
|
||||||
|
Title: Create Interactive Chart with the JavaScript 'ApexCharts' Library
|
||||||
|
Description: Provides an 'htmlwidgets' interface to 'apexcharts.js'.
|
||||||
|
Authors@R: c(
|
||||||
|
person("Victor", "Perrier", email = "victor.perrier@dreamrs.fr", role = c("aut", "cre")),
|
||||||
|
person("Fanny", "Meyer", email = "fanny.meyer@dreamrs.fr", role = c("aut")),
|
||||||
|
person("ApexCharts", role = c("cph"), comment = "apexcharts.js library"))
|
||||||
|
License: MIT + file LICENSE
|
||||||
|
Encoding: UTF-8
|
||||||
|
LazyData: true
|
||||||
|
ByteCompile: true
|
||||||
|
Imports:
|
||||||
|
htmlwidgets
|
||||||
|
RoxygenNote: 6.0.1
|
||||||
|
URL: https://github.com/dreamRs/apexcharter
|
||||||
|
BugReports: https://github.com/dreamRs/apexcharter/issues
|
|
@ -0,0 +1,32 @@
|
||||||
|
R PACKAGE
|
||||||
|
=========
|
||||||
|
|
||||||
|
YEAR: 2018
|
||||||
|
COPYRIGHT HOLDER: dreamRs
|
||||||
|
|
||||||
|
|
||||||
|
ApexCharts.js
|
||||||
|
=============
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2018 ApexCharts
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Generated by roxygen2: do not edit by hand
|
||||||
|
|
||||||
|
export(apexcharter)
|
||||||
|
export(apexcharterOutput)
|
||||||
|
export(renderApexcharter)
|
||||||
|
importFrom(htmlwidgets,createWidget)
|
||||||
|
importFrom(htmlwidgets,shinyRenderWidget)
|
||||||
|
importFrom(htmlwidgets,shinyWidgetOutput)
|
||||||
|
importFrom(htmlwidgets,sizingPolicy)
|
|
@ -0,0 +1,83 @@
|
||||||
|
|
||||||
|
#' Create a apexcharts.js widget
|
||||||
|
#'
|
||||||
|
#' @param ax_opts A \code{list} in JSON format with chart parameters
|
||||||
|
#' @param data A \code{data.frame}.
|
||||||
|
#' @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)
|
||||||
|
#'
|
||||||
|
#' apexcharter(ax_opts = list(
|
||||||
|
#' chart = list(type = "bar"),
|
||||||
|
#' series = list(list(
|
||||||
|
#' name = "Example",
|
||||||
|
#' data = sample(1:100, 5)
|
||||||
|
#' )),
|
||||||
|
#' xaxis = list(categories = LETTERS[1:5])
|
||||||
|
#' ))
|
||||||
|
apexcharter <- function(ax_opts = list(), data = NULL, width = NULL, height = NULL, elementId = NULL) {
|
||||||
|
|
||||||
|
# forward options using x
|
||||||
|
x <- list(
|
||||||
|
ax_opts = ax_opts,
|
||||||
|
data = data
|
||||||
|
)
|
||||||
|
|
||||||
|
# create widget
|
||||||
|
htmlwidgets::createWidget(
|
||||||
|
name = 'apexcharter',
|
||||||
|
x,
|
||||||
|
width = width,
|
||||||
|
height = height,
|
||||||
|
package = 'apexcharter',
|
||||||
|
elementId = elementId,
|
||||||
|
sizingPolicy = htmlwidgets::sizingPolicy(
|
||||||
|
defaultWidth = "90%",
|
||||||
|
defaultHeight = "90%",
|
||||||
|
viewer.defaultHeight = "100%",
|
||||||
|
viewer.defaultWidth = "100%",
|
||||||
|
knitr.figure = FALSE,
|
||||||
|
browser.fill = TRUE,
|
||||||
|
padding = 20
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' Shiny bindings for apexcharter
|
||||||
|
#'
|
||||||
|
#' 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.
|
||||||
|
#'
|
||||||
|
#' @name apexcharter-shiny
|
||||||
|
#'
|
||||||
|
#' @export
|
||||||
|
#'
|
||||||
|
#' @importFrom htmlwidgets shinyWidgetOutput shinyRenderWidget
|
||||||
|
apexcharterOutput <- function(outputId, width = '100%', height = '400px'){
|
||||||
|
htmlwidgets::shinyWidgetOutput(outputId, 'apexcharter', width, height, package = 'apexcharter')
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @rdname apexcharter-shiny
|
||||||
|
#' @export
|
||||||
|
renderApexcharter <- function(expr, env = parent.frame(), quoted = FALSE) {
|
||||||
|
if (!quoted) { expr <- substitute(expr) } # force quoted
|
||||||
|
htmlwidgets::shinyRenderWidget(expr, apexcharterOutput, env, quoted = TRUE)
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
|
||||||
|
|
||||||
|
# apexcharts.js raw api ---------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
library(apexcharter)
|
||||||
|
library(ggplot2) # for data
|
||||||
|
library(dplyr)
|
||||||
|
|
||||||
|
|
||||||
|
# bar ----
|
||||||
|
|
||||||
|
data(mpg)
|
||||||
|
dat <- count(mpg, manufacturer)
|
||||||
|
|
||||||
|
apexcharter(ax_opts = list(
|
||||||
|
chart = list(type = "bar"),
|
||||||
|
plotOptions = list(
|
||||||
|
bar = list(
|
||||||
|
horizontal = FALSE,
|
||||||
|
endingShape = "flat",
|
||||||
|
columnWidth = "70%",
|
||||||
|
dataLabels = list(
|
||||||
|
position = "top"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
colors = list("#112446"),
|
||||||
|
grid = list(
|
||||||
|
show = TRUE,
|
||||||
|
position = "front"
|
||||||
|
),
|
||||||
|
series = list(list(
|
||||||
|
name = "Count",
|
||||||
|
data = dat$n
|
||||||
|
)),
|
||||||
|
xaxis = list(categories = dat$manufacturer)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# line ----
|
||||||
|
|
||||||
|
# recreating (mostly): https://apexcharts.com/javascript-chart-demos/line-charts/data-labels/
|
||||||
|
|
||||||
|
apexcharter(ax_opts = list(
|
||||||
|
chart = list(
|
||||||
|
type = "line"
|
||||||
|
),
|
||||||
|
stroke = list(
|
||||||
|
curve = "smooth"
|
||||||
|
),
|
||||||
|
grid = list(
|
||||||
|
borderColor = "#e7e7e7",
|
||||||
|
row = list(
|
||||||
|
colors = c("#f3f3f3", "transparent"),
|
||||||
|
opacity = 0.5
|
||||||
|
)
|
||||||
|
),
|
||||||
|
dataLabels = list(
|
||||||
|
enabled = TRUE
|
||||||
|
),
|
||||||
|
markers = list(style = "inverted", size = 6),
|
||||||
|
series = list(
|
||||||
|
list(
|
||||||
|
name = "High",
|
||||||
|
data = c(28, 29, 33, 36, 32, 32, 33)
|
||||||
|
),
|
||||||
|
list(
|
||||||
|
name = "Low",
|
||||||
|
data = c(12, 11, 14, 18, 17, 13, 13)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
title = list(
|
||||||
|
text = "Average High & Low Temperature",
|
||||||
|
align = "left"
|
||||||
|
),
|
||||||
|
xaxis = list(
|
||||||
|
categories = month.abb[1:7]
|
||||||
|
),
|
||||||
|
yaxis = list(
|
||||||
|
title = list(text = "Temperature"),
|
||||||
|
labels = list(
|
||||||
|
formatter = htmlwidgets::JS("function(value) {return value + '°C';}")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
HTMLWidgets.widget({
|
||||||
|
|
||||||
|
name: 'apexcharter',
|
||||||
|
|
||||||
|
type: 'output',
|
||||||
|
|
||||||
|
factory: function(el, width, height) {
|
||||||
|
|
||||||
|
var ax_opts, chart;
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
renderValue: function(x) {
|
||||||
|
|
||||||
|
|
||||||
|
// Global options
|
||||||
|
ax_opts = x.ax_opts;
|
||||||
|
|
||||||
|
// Sizing
|
||||||
|
ax_opts.chart.width = width;
|
||||||
|
ax_opts.chart.height = height;
|
||||||
|
|
||||||
|
// Generate chart
|
||||||
|
chart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
|
||||||
|
chart.render();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
resize: function(width, height) {
|
||||||
|
chart.updateOptions({
|
||||||
|
chart: {
|
||||||
|
width: width,
|
||||||
|
height: height
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,5 @@
|
||||||
|
dependencies:
|
||||||
|
- name: apexcharts
|
||||||
|
version: 1.0.4
|
||||||
|
src: htmlwidgets/lib/apexcharts-1.0.4
|
||||||
|
script: apexcharts.min.js
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,30 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/apexcharter.R
|
||||||
|
\name{apexcharter-shiny}
|
||||||
|
\alias{apexcharter-shiny}
|
||||||
|
\alias{apexcharterOutput}
|
||||||
|
\alias{renderApexcharter}
|
||||||
|
\title{Shiny bindings for apexcharter}
|
||||||
|
\usage{
|
||||||
|
apexcharterOutput(outputId, width = "100\%", height = "400px")
|
||||||
|
|
||||||
|
renderApexcharter(expr, env = parent.frame(), quoted = FALSE)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{outputId}{output variable to read from}
|
||||||
|
|
||||||
|
\item{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.}
|
||||||
|
|
||||||
|
\item{expr}{An expression that generates a apexcharter}
|
||||||
|
|
||||||
|
\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.}
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Output and render functions for using apexcharter within Shiny
|
||||||
|
applications and interactive Rmd documents.
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/apexcharter.R
|
||||||
|
\name{apexcharter}
|
||||||
|
\alias{apexcharter}
|
||||||
|
\title{Create a apexcharts.js widget}
|
||||||
|
\usage{
|
||||||
|
apexcharter(ax_opts = list(), data = NULL, width = NULL, height = NULL,
|
||||||
|
elementId = NULL)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{ax_opts}{A \code{list} in JSON format with chart parameters}
|
||||||
|
|
||||||
|
\item{data}{A \code{data.frame}.}
|
||||||
|
|
||||||
|
\item{width}{A numeric input in pixels.}
|
||||||
|
|
||||||
|
\item{height}{A numeric input in pixels.}
|
||||||
|
|
||||||
|
\item{elementId}{Use an explicit element ID for the widget.}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
A \code{apexcharts} \code{htmlwidget} object.
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Create a apexcharts.js widget
|
||||||
|
}
|
||||||
|
\examples{
|
||||||
|
|
||||||
|
library(apexcharter)
|
||||||
|
|
||||||
|
apexcharter(ax_opts = list(
|
||||||
|
chart = list(type = "bar"),
|
||||||
|
series = list(list(
|
||||||
|
name = "Example",
|
||||||
|
data = sample(1:100, 5)
|
||||||
|
)),
|
||||||
|
xaxis = list(categories = LETTERS[1:5])
|
||||||
|
))
|
||||||
|
}
|
Loading…
Reference in New Issue