From 74b92b3273f32a76a6596513bb445d3dcf1abe85 Mon Sep 17 00:00:00 2001 From: pvictor Date: Thu, 14 Feb 2019 09:22:57 +0100 Subject: [PATCH] change fun name & data example --- .Rbuildignore | 1 + DESCRIPTION | 2 +- NAMESPACE | 2 +- R/apex-utils.R | 4 +- R/apexcharter.R | 10 +- R/data.R | 18 ++ R/utils.R | 8 +- README.md | 4 +- data-raw/unhcr_popstats_all.R | 224 ++++++++++++++++++++++++ data-raw/unhcr_popstats_fr.R | 61 +++++++ data/unhcr_popstats_2017.rda | Bin 0 -> 27500 bytes dev/raw-api.R | 4 +- inst/examples/barcharts.R | 8 +- inst/examples/examples-unhcr.R | 174 ++++++++++++++++++ inst/examples/heatmap.R | 6 +- inst/examples/pie.R | 4 +- inst/examples/proxy-update-serie-line.R | 2 +- inst/examples/radial.R | 4 +- inst/examples/timeseries.R | 6 +- man/{apexchart.Rd => apexcharter.Rd} | 12 +- man/ax-series.Rd | 4 +- man/unhcr_popstats_2017.Rd | 26 +++ 22 files changed, 544 insertions(+), 40 deletions(-) create mode 100644 R/data.R create mode 100644 data-raw/unhcr_popstats_all.R create mode 100644 data-raw/unhcr_popstats_fr.R create mode 100644 data/unhcr_popstats_2017.rda create mode 100644 inst/examples/examples-unhcr.R rename man/{apexchart.Rd => apexcharter.Rd} (72%) create mode 100644 man/unhcr_popstats_2017.Rd diff --git a/.Rbuildignore b/.Rbuildignore index 84f185c..2244d43 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,4 @@ +^data-raw$ ^\.travis\.yml$ ^apexcharter\.Rproj$ ^\.Rproj\.user$ diff --git a/DESCRIPTION b/DESCRIPTION index 7e6afd4..4a2dd08 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: apexcharter -Version: 0.0.0.9600 +Version: 0.0.1.900 Title: Create Interactive Chart with the JavaScript 'ApexCharts' Library Description: Provides an 'htmlwidgets' interface to 'apexcharts.js'. Authors@R: c( diff --git a/NAMESPACE b/NAMESPACE index a3e9349..b6464c7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,9 +1,9 @@ # Generated by roxygen2: do not edit by hand export("%>%") -export(apexchart) export(apexchartOutput) export(apexchartProxy) +export(apexcharter) export(ax_annotations) export(ax_chart) export(ax_colors) diff --git a/R/apex-utils.R b/R/apex-utils.R index d428143..4b5e3a3 100644 --- a/R/apex-utils.R +++ b/R/apex-utils.R @@ -384,14 +384,14 @@ ax_responsive <- function(ax, ...) { #' @examples #' #' # One serie -#' apexchart() %>% +#' apexcharter() %>% #' ax_series(list( #' name = "rnorm", #' data = rnorm(10) #' )) #' #' # Two series -#' apexchart() %>% +#' apexcharter() %>% #' ax_series( #' list( #' name = "rnorm 1", diff --git a/R/apexcharter.R b/R/apexcharter.R index 24690e1..66fafc2 100644 --- a/R/apexcharter.R +++ b/R/apexcharter.R @@ -1,8 +1,8 @@ #' Create a apexcharts.js widget #' -#' @param ax_opts A \code{list} in JSON format with chart parameters -#' @param data A \code{data.frame}. +#' @param data Default dataset to use for chart. If not already a \code{data.frame}, it will be coerced to with \code{as.data.frame}. +#' @param ax_opts A \code{list} in JSON format with chart parameters.#' #' @param width A numeric input in pixels. #' @param height A numeric input in pixels. #' @param elementId Use an explicit element ID for the widget. @@ -16,7 +16,7 @@ #' #' library(apexcharter) #' -#' apexchart(ax_opts = list( +#' apexcharter(ax_opts = list( #' chart = list(type = "bar"), #' series = list(list( #' name = "Example", @@ -24,12 +24,12 @@ #' )), #' xaxis = list(categories = LETTERS[1:5]) #' )) -apexchart <- function(ax_opts = list(), data = NULL, width = NULL, height = NULL, elementId = NULL) { +apexcharter <- function(data = NULL, ax_opts = list(), width = NULL, height = NULL, elementId = NULL) { # forward options using x x <- list( ax_opts = ax_opts, - data = data + data = as.data.frame(data) ) # create widget diff --git a/R/data.R b/R/data.R new file mode 100644 index 0000000..73625f6 --- /dev/null +++ b/R/data.R @@ -0,0 +1,18 @@ +#' UNHCR data for 2017 +#' +#' The dataset contains data about UNHCR's populations of concern for the year 2017. +#' +#' @format A data frame with 11237 observations on the following 6 variables. +#' \describe{ +#' \item{\code{country_origin}}{Country of origin of population} +#' \item{\code{country_residence}}{Country / territory of asylum/residence of population} +#' \item{\code{population_type}}{Populations of concern : Refugees, Asylum-seekers, Internally displaced persons (IDPs), Returned refugees, +#' Returned IDPs, Stateless persons, Others of concern.} +#' \item{\code{value}}{Number of people concerned} +#' \item{\code{continent_residence}}{Continent of origin of population} +#' \item{\code{continent_origin}}{Continent of residence of population} +#' } +#' @source UNHCR (The UN Refugee Agency) (\url{http://popstats.unhcr.org/en/overview}) +"unhcr_popstats_2017" + + diff --git a/R/utils.R b/R/utils.R index 802d55b..045d738 100644 --- a/R/utils.R +++ b/R/utils.R @@ -14,11 +14,11 @@ dropNulls <- function(x) { #' Utility function to create ApexChart parameters JSON #' -#' @param ax A \code{apexchart} \code{htmlwidget} object. +#' @param ax A \code{apexcharts} \code{htmlwidget} object. #' @param name Slot's name to edit #' @param ... Arguments for the slot #' -#' @return A \code{apexchart} \code{htmlwidget} object. +#' @return A \code{apexcharts} \code{htmlwidget} object. #' #' @importFrom utils modifyList #' @@ -40,11 +40,11 @@ dropNulls <- function(x) { #' Utility function to create ApexChart parameters JSON #' -#' @param ax A \code{apexchart} \code{htmlwidget} object. +#' @param ax A \code{apexcharts} \code{htmlwidget} object. #' @param name Slot's name to edit #' @param l List of arguments for the slot #' -#' @return A \code{apexchart} \code{htmlwidget} object. +#' @return A \code{apexcharts} \code{htmlwidget} object. #' #' @noRd .ax_opt2 <- function(ax, name, l) { diff --git a/README.md b/README.md index d6f55d3..7548f18 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ library(magrittr) data(mpg) dat <- count(mpg, manufacturer) -apexchart() %>% +apexcharter() %>% ax_chart(type = "bar") %>% ax_plotOptions(bar = barOpts( horizontal = FALSE, @@ -60,7 +60,7 @@ apexchart() %>% Pass a list of parameters to the function: ``` r -apexchart(ax_opts = list( +apexcharter(ax_opts = list( chart = list( type = "line" ), diff --git a/data-raw/unhcr_popstats_all.R b/data-raw/unhcr_popstats_all.R new file mode 100644 index 0000000..ac82436 --- /dev/null +++ b/data-raw/unhcr_popstats_all.R @@ -0,0 +1,224 @@ + +# ------------------------------------------------------------------------ +# +# Title : UNHCR - Persons of concerns (All) +# By : Victor +# Date : 2018-10-29 +# +# ------------------------------------------------------------------------ + + + + +# Package ----------------------------------------------------------------- + +library("data.table") +library("janitor") +library("ggplot2") + + + + +# Data -------------------------------------------------------------------- + +# http://popstats.unhcr.org/en/persons_of_concern/https://goo.gl/rcTJPz + +unhcr_popstats <- fread( + input = "data-raw/unhcr_popstats_export_time_series_all_data.csv", + skip = 3, + na.strings = "*", + encoding = "UTF-8" +) +unhcr_popstats <- clean_names(unhcr_popstats) +unhcr_popstats + + + + + +# Get Continent ----------------------------------------------------------- + +wrld <- rnaturalearth::countries110@data +setDT(wrld) + +continents <- merge( + x = unique(rbind( + unique(unhcr_popstats[, list(country = country_territory_of_asylum_residence)]), + unique(unhcr_popstats[, list(country = origin)]) + )), + y = wrld[, list(country = name_long, iso_a2, iso_a3, continent)], + all.x = TRUE +) + +table(continents$continent, useNA = "a") + +# Missing ones +cat( + paste(sprintf( + "continents[country == \"%s\", `:=`(iso_a2 = \"\", iso_a3 = \"\", continent = \"\")]", + continents$country[is.na(continents$continent)] + ), collapse = "\n") +) + +continents[country == "Anguilla", `:=`(iso_a2 = "AI", iso_a3 = "AIA", continent = "South America")] +continents[country == "Antigua and Barbuda", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Aruba", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "Bahrain", `:=`(iso_a2 = "BH", iso_a3 = "BHR", continent = "Asia")] +continents[country == "Barbados", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Bolivia (Plurinational State of)", `:=`(iso_a2 = "BO", iso_a3 = "", continent = "South America")] +continents[country == "Bonaire", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "British Virgin Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Cabo Verde", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Cayman Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Central African Rep.", `:=`(iso_a2 = "CF", iso_a3 = "CAF", continent = "Africa")] +continents[country == "China, Hong Kong SAR", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "China, Macao SAR", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Comoros", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Congo", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Curaçao", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "Curaçao", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "Czech Rep.", `:=`(iso_a2 = "CZ", iso_a3 = "CZE", continent = "Europe")] +continents[country %like% "Ivoire", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Dem. People's Rep. of Korea", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Dem. Rep. of the Congo", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Dominican Rep.", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "French Guiana", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "Gambia", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Grenada", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Iran (Islamic Rep. of)", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Lao People's Dem. Rep.", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Liechtenstein", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Malta", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Mauritius", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Micronesia (Federated States of)", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Monaco", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Montserrat", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Nauru", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Palau", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Rep. of Korea", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Rep. of Moldova", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Saint Kitts and Nevis", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Saint Lucia", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Saint Vincent and the Grenadines", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Samoa", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Serbia and Kosovo (S/RES/1244 (1999))", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Seychelles", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +continents[country == "Singapore", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Sint Maarten (Dutch part)", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "State of Palestine", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Syrian Arab Rep.", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "The former Yugoslav Republic of Macedonia", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Tonga", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Turks and Caicos Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "United Rep. of Tanzania", `:=`(iso_a2 = "TZ", iso_a3 = "", continent = "Africa")] +continents[country == "United States of America", `:=`(iso_a2 = "US", iso_a3 = "USA", continent = "North America")] +continents[country == "Venezuela (Bolivarian Republic of)", `:=`(iso_a2 = "", iso_a3 = "", continent = "South America")] +continents[country == "Viet Nam", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] + +continents[country == "American Samoa", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Andorra", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Bermuda", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Cook Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Dominica", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "French Polynesia", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Gibraltar", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Guadeloupe", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Guam", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +# continents[country == "Holy See (the)", `:=`(iso_a2 = "", iso_a3 = "", continent = "")] +continents[country == "Kiribati", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Maldives", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Marshall Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Martinique", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "Niue", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Norfolk Island", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +continents[country == "Palestinian", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Saint-Pierre-et-Miquelon", `:=`(iso_a2 = "", iso_a3 = "", continent = "North America")] +continents[country == "San Marino", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Sao Tome and Principe", `:=`(iso_a2 = "", iso_a3 = "", continent = "Africa")] +# continents[country == "Stateless", `:=`(iso_a2 = "", iso_a3 = "", continent = "")] +continents[country == "Svalbard and Jan Mayen", `:=`(iso_a2 = "", iso_a3 = "", continent = "Europe")] +continents[country == "Tibetan", `:=`(iso_a2 = "", iso_a3 = "", continent = "Asia")] +continents[country == "Tuvalu", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] +# continents[country == "Various/Unknown", `:=`(iso_a2 = "", iso_a3 = "", continent = "")] +continents[country == "Wallis and Futuna Islands", `:=`(iso_a2 = "", iso_a3 = "", continent = "Oceania")] + +table(continents$continent, useNA = "a") + +# origin +unique(unhcr_popstats$origin)[!unique(unhcr_popstats$origin) %in% continents$country] + + + +unhcr_popstats <- merge( + x = unhcr_popstats, y = continents[, list(country, continent_residence = continent)], + by.x = "country_territory_of_asylum_residence", by.y = "country" +) + +unhcr_popstats <- merge( + x = unhcr_popstats, y = continents[, list(country, continent_origin = continent)], + by.x = "origin", by.y = "country" +) + + + + + +# Use data 2017 ----------------------------------------------------------- + + +setnames(unhcr_popstats, "origin", "country_origin") +setnames(unhcr_popstats, "country_territory_of_asylum_residence", "country_residence") + +unhcr_popstats[, country_residence := stringi::stri_trans_general(str = country_residence, id = "ASCII-Latin")] +unhcr_popstats[, country_origin := stringi::stri_trans_general(str = country_origin, id = "ASCII-Latin")] + + +unhcr_popstats_2017 <- unhcr_popstats[year == 2017, -c("year")] +unhcr_popstats_2017 <- as.data.frame(unhcr_popstats_2017) +head(unhcr_popstats_2017) + +utils::promptData(object = unhcr_popstats_2017, filename = "tmp.Rd") + + +usethis::use_data(unhcr_popstats_2017, overwrite = TRUE) + + + + +# Explo ------------------------------------------------------------------- + + +unhcr_popstats[year == 2017, list(total_population = sum(value, na.rm = TRUE)), by = continent_residence] +unhcr_popstats[year == 2017, list(total_population = sum(value, na.rm = TRUE)), by = continent_origin] +unhcr_popstats[year == 2017, list(total_population = sum(value, na.rm = TRUE)), by = list(continent_origin, continent_residence)] + +ggplot(data = unhcr_popstats[year == 2017, list(total_population = sum(value, na.rm = TRUE)), by = continent_residence]) + + geom_col(aes(x = continent_residence, y = total_population)) + +ggplot(data = unhcr_popstats[year == 2017, list(total_population = sum(value, na.rm = TRUE)), by = continent_origin]) + + geom_col(aes(x = continent_origin, y = total_population)) + + + +ggplot(data = rbind( + unhcr_popstats[year == 2017 & population_type %like% "^Refugees", + list(total_population = sum(value, na.rm = TRUE), type = "from"), + by = list(continent = continent_origin)], + unhcr_popstats[year == 2017 & population_type %like% "^Refugees", + list(total_population = sum(value, na.rm = TRUE), type = "to"), + by = list(continent = continent_residence)] +)) + + geom_col(aes(x = continent, y = total_population, fill = type), position = "dodge") + + + + +unhcr_popstats[year == 2017, list(value = sum(value, na.rm = TRUE)), by = population_type] +ggplot(data = unhcr_popstats[year == 2017, list(value = sum(value, na.rm = TRUE)), by = population_type]) + + geom_col(aes(x = population_type, y = value)) + + +unhcr_popstats[year == 2017, list(value = sum(value, na.rm = TRUE)), by = list(population_type, continent_residence)] + + + diff --git a/data-raw/unhcr_popstats_fr.R b/data-raw/unhcr_popstats_fr.R new file mode 100644 index 0000000..c123e0a --- /dev/null +++ b/data-raw/unhcr_popstats_fr.R @@ -0,0 +1,61 @@ + +# ------------------------------------------------------------------------ +# +# Title : UNCHR - Persons of concerns (France) +# By : Victor +# Date : 2018-10-29 +# +# ------------------------------------------------------------------------ + + + + +# Package ----------------------------------------------------------------- + +library("data.table") +library("janitor") +library("ggplot2") + + + + +# Data -------------------------------------------------------------------- + +# http://popstats.unhcr.org/en/persons_of_concern/https://goo.gl/rcTJPz + +unhcr_popstats_fr <- fread( + input = "data-raw/unhcr_popstats_export_persons_of_concern_2018_10_29_143107.csv", + skip = 3, + na.strings = "*" +) +unhcr_popstats_fr <- clean_names(unhcr_popstats_fr) +unhcr_popstats_fr + + + + + +# Origin countries of refugees in 2017 ------------------------------------ + + +# excluding "Various/Unknown" +unhcr_fr_2017 <- unhcr_popstats_fr[origin != "Various/Unknown" & year == 2017, list( + origin, + refugees = refugees_incl_refugee_like_situations, + asylum_seekers = asylum_seekers_pending_cases, + total_population +)] + + +unhcr_fr_2017[order(total_population, decreasing = TRUE)][1:10] +ggplot(data = unhcr_fr_2017[order(total_population, decreasing = TRUE)][1:10]) + + geom_col(aes(x = origin, y = total_population)) + + + + + + + + + diff --git a/data/unhcr_popstats_2017.rda b/data/unhcr_popstats_2017.rda new file mode 100644 index 0000000000000000000000000000000000000000..301573f1b06d00bb2ed402b4fb52c3b664412bc8 GIT binary patch literal 27500 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 literal 0 HcmV?d00001 diff --git a/dev/raw-api.R b/dev/raw-api.R index 660ad81..92c9956 100644 --- a/dev/raw-api.R +++ b/dev/raw-api.R @@ -13,7 +13,7 @@ library(dplyr) data(mpg) dat <- count(mpg, manufacturer) -apexchart(ax_opts = list( +apexcharter(ax_opts = list( chart = list(type = "bar"), plotOptions = list( bar = list( @@ -43,7 +43,7 @@ apexchart(ax_opts = list( # recreating (mostly): https://apexcharts.com/javascript-chart-demos/line-charts/data-labels/ -apexchart(ax_opts = list( +apexcharter(ax_opts = list( chart = list( type = "line" ), diff --git a/inst/examples/barcharts.R b/inst/examples/barcharts.R index f4bc3ad..9e09b71 100644 --- a/inst/examples/barcharts.R +++ b/inst/examples/barcharts.R @@ -23,7 +23,7 @@ library(dplyr) # for count data(mpg) dat <- count(mpg, manufacturer) -apexchart() %>% +apexcharter() %>% ax_chart(type = "bar") %>% ax_plotOptions(bar = barOpts( horizontal = FALSE, @@ -55,7 +55,7 @@ apexchart() %>% data(mpg) dat <- count(mpg, manufacturer) -apexchart() %>% +apexcharter() %>% ax_chart(type = "bar") %>% ax_plotOptions(bar = barOpts( horizontal = TRUE, @@ -86,7 +86,7 @@ apexchart() %>% stacked <- count(mpg, manufacturer, year) -apexchart() %>% +apexcharter() %>% ax_chart(type = "bar", stacked = TRUE) %>% ax_series( list( @@ -113,7 +113,7 @@ apexchart() %>% stacked <- count(mpg, manufacturer, year) -apexchart() %>% +apexcharter() %>% ax_chart(type = "bar", stacked = FALSE) %>% ax_plotOptions(bar = barOpts( endingShape = "rounded" diff --git a/inst/examples/examples-unhcr.R b/inst/examples/examples-unhcr.R new file mode 100644 index 0000000..19fff87 --- /dev/null +++ b/inst/examples/examples-unhcr.R @@ -0,0 +1,174 @@ + +# ------------------------------------------------------------------------ +# +# Title : apexcharter examples - UNHCR +# By : Victor +# Date : 2018-10-29 +# +# ------------------------------------------------------------------------ + + + + +# Package ----------------------------------------------------------------- + +library("apexcharter") +library("dplyr") + + + + +# Data -------------------------------------------------------------------- + +data("unhcr_popstats_2017") +head(unhcr_popstats_2017) + + + + +# Categories of people of concerns ---------------------------------------- + +categories_unhcr <- count(unhcr_popstats_2017, population_type, sort = TRUE) + +apexcharter() %>% + ax_chart(type = "bar") %>% + ax_plotOptions(bar = barOpts( + horizontal = TRUE, + dataLabels = list( + position = "center" + )) + ) %>% + ax_grid( + show = TRUE, + yaxis = list(lines = list(show = FALSE)), + xaxis = list(lines = list(show = TRUE)) + ) %>% + ax_series(list( + name = "Number of persons of concern", + data = categories_unhcr$n + )) %>% + ax_colors("#112446") %>% + ax_xaxis(categories = categories_unhcr$population_type) %>% + ax_xaxis(title = list(text = "Number of persons of concern")) %>% + ax_title(text = "UNHCR's populations of concern in 2017") %>% + ax_subtitle(text = "Data from the UN Regugee Agency") + + + + + + +# Origin & Residence Refugees --------------------------------------------- + +refugees <- unhcr_popstats_2017 %>% + filter( + population_type %in% "Refugees (incl. refugee-like situations)", + !is.na(continent_origin) + ) + + +apexcharter() %>% + ax_chart(type = "bar", stacked = FALSE) %>% + ax_dataLabels(enabled = FALSE) %>% + ax_series( + list( + name = "Residence", + data = refugees %>% + count(continent_residence, wt = value) %>% + pull(n) + ), + list( + name = "Origin", + data = refugees %>% + count(continent_origin, wt = value) + %>% pull(n) + ) + ) %>% + ax_colors("#58224f", "#b65165") %>% + ax_stroke(show = TRUE, width = 1, colors = list("#FFF")) %>% + ax_xaxis( + categories = refugees %>% + distinct(continent_origin) %>% + arrange(continent_origin) %>% + pull(continent_origin) + ) %>% + ax_yaxis( + labels = list( + formatter = htmlwidgets::JS( + "function(val) {return val.toLocaleString();}" + ) + ) + ) %>% + ax_tooltip(shared = TRUE) %>% + ax_legend( + position = "right", + verticalAlign = "top" + ) %>% + ax_title(text = "Refugees Origin & Residence by continent in 2017") %>% + ax_subtitle(text = "Data from the UN Regugee Agency") + + + + + +# Type of populations of concerns by continent ---------------------------- + +count(unhcr_popstats_2017, continent = continent_residence, population_type, wt = value) + +apexcharter() %>% + ax_chart(type = "bar", stacked = TRUE, stackType = "100%") %>% + ax_plotOptions(bar = barOpts(horizontal = TRUE)) %>% + ax_series( + list( + name = "Asylum-seekers", + data = unhcr_popstats_2017 %>% + filter(population_type == "Asylum-seekers") %>% + count(continent_residence, wt = value) %>% + pull(n) + ), + list( + name = "Refugees (incl. refugee-like situations)", + data = unhcr_popstats_2017 %>% + filter(population_type == "Refugees (incl. refugee-like situations)") %>% + count(continent_residence, wt = value) %>% + pull(n) + ), + list( + name = "Internally displaced persons", + data = unhcr_popstats_2017 %>% + filter(population_type == "Internally displaced persons") %>% + count(continent_residence, wt = value) %>% + tidyr::complete(continent_residence = unique(unhcr_popstats_2017$continent_residence), fill = list(n = 0)) %>% # No Oceania ! + pull(n) + ), + list( + name = "Stateless persons", + data = unhcr_popstats_2017 %>% + filter(population_type == "Stateless persons") %>% + count(continent_residence, wt = value) %>% + pull(n) + ) + ) %>% + ax_xaxis(categories = sort(unique(unhcr_popstats_2017$continent_residence))) %>% + ax_yaxis(min = 0, max = 100, + tickAmount = 4) %>% + ax_xaxis( + labels = list( + formatter = htmlwidgets::JS( + "function(val) {return val + '%';}" + ) + ) + ) %>% + ax_tooltip(shared = TRUE) + + + + + + + + + + + + diff --git a/inst/examples/heatmap.R b/inst/examples/heatmap.R index 725d0ae..3fe4e5c 100644 --- a/inst/examples/heatmap.R +++ b/inst/examples/heatmap.R @@ -28,7 +28,7 @@ mtcars_long <- mtcars %>% mtcars_long$value <- round(mtcars_long$value) -test <- apexchart() %>% +test <- apexcharter() %>% ax_chart(type = "heatmap") %>% ax_dataLabels(enabled = FALSE) %>% ax_series2(lapply( @@ -46,7 +46,7 @@ test <- apexchart() %>% ax_xaxis(type = "category", categories = unique(mtcars_long$variable)) -apexchart() %>% +apexcharter() %>% ax_chart(type = "heatmap") %>% ax_dataLabels(enabled = FALSE) %>% ax_series2(l = list( @@ -74,7 +74,7 @@ apexchart() %>% data("vaccines", package = "highcharter") -apexchart() %>% +apexcharter() %>% ax_chart(type = "heatmap", animations = list(enabled = FALSE)) %>% ax_dataLabels(enabled = FALSE) %>% ax_series2(lapply( diff --git a/inst/examples/pie.R b/inst/examples/pie.R index 8a93921..020985e 100644 --- a/inst/examples/pie.R +++ b/inst/examples/pie.R @@ -20,7 +20,7 @@ library(apexcharter) # Simple pie -------------------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "pie") %>% ax_series(23, 45, 56) %>% ax_labels("A", "B", "C") @@ -31,7 +31,7 @@ apexchart() %>% # Donut ------------------------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "donut") %>% ax_series2(c(23, 45, 56)) %>% ax_labels2(c("A", "B", "C")) diff --git a/inst/examples/proxy-update-serie-line.R b/inst/examples/proxy-update-serie-line.R index 6e09fe3..b396fed 100644 --- a/inst/examples/proxy-update-serie-line.R +++ b/inst/examples/proxy-update-serie-line.R @@ -23,7 +23,7 @@ ui <- fluidPage( server <- function(input, output, session) { output$graph <- renderApexchart({ - apexchart() %>% + apexcharter() %>% ax_chart(type = "line") %>% ax_plotOptions(line = list(curve = "smooth")) %>% ax_dataLabels(enabled = FALSE) %>% diff --git a/inst/examples/radial.R b/inst/examples/radial.R index 0db0a50..3a62583 100644 --- a/inst/examples/radial.R +++ b/inst/examples/radial.R @@ -20,7 +20,7 @@ library(apexcharter) # Basic ------------------------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "radialBar") %>% ax_plotOptions( radialBar = radialBarOpts( @@ -35,7 +35,7 @@ apexchart() %>% # Stroked gauge ----------------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "radialBar") %>% ax_plotOptions( radialBar = radialBarOpts( diff --git a/inst/examples/timeseries.R b/inst/examples/timeseries.R index baae2d5..ac8d018 100644 --- a/inst/examples/timeseries.R +++ b/inst/examples/timeseries.R @@ -25,7 +25,7 @@ data("economics", package = "ggplot2") # One serie (class Date) -------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "area", zoom = list(enabled = TRUE)) %>% # ax_stroke(curve = "smooth") %>% ax_plotOptions(line = list(curve = "smooth")) %>% @@ -62,7 +62,7 @@ apexchart() %>% # Two series (Date) ------------------------------------------------------- -apexchart() %>% +apexcharter() %>% ax_chart(type = "line", zoom = list(enabled = TRUE)) %>% ax_plotOptions(line = list(curve = "smooth")) %>% ax_dataLabels(enabled = FALSE) %>% @@ -99,7 +99,7 @@ apexchart() %>% # doesn't work since 2.0.0 -apexchart() %>% +apexcharter() %>% ax_chart(type = "area", scroller = list(enabled = TRUE)) %>% ax_dataLabels(enabled = FALSE) %>% ax_series(list( diff --git a/man/apexchart.Rd b/man/apexcharter.Rd similarity index 72% rename from man/apexchart.Rd rename to man/apexcharter.Rd index 117f01c..2a93792 100644 --- a/man/apexchart.Rd +++ b/man/apexcharter.Rd @@ -1,16 +1,16 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/apexcharter.R -\name{apexchart} -\alias{apexchart} +\name{apexcharter} +\alias{apexcharter} \title{Create a apexcharts.js widget} \usage{ -apexchart(ax_opts = list(), data = NULL, width = NULL, +apexcharter(data = NULL, ax_opts = list(), width = NULL, height = NULL, elementId = NULL) } \arguments{ -\item{ax_opts}{A \code{list} in JSON format with chart parameters} +\item{data}{Default dataset to use for chart. If not already a \code{data.frame}, it will be coerced to with \code{as.data.frame}.} -\item{data}{A \code{data.frame}.} +\item{ax_opts}{A \code{list} in JSON format with chart parameters.#'} \item{width}{A numeric input in pixels.} @@ -28,7 +28,7 @@ Create a apexcharts.js widget library(apexcharter) -apexchart(ax_opts = list( +apexcharter(ax_opts = list( chart = list(type = "bar"), series = list(list( name = "Example", diff --git a/man/ax-series.Rd b/man/ax-series.Rd index 50cbc14..9b944f2 100644 --- a/man/ax-series.Rd +++ b/man/ax-series.Rd @@ -26,14 +26,14 @@ Add data to a chart \examples{ # One serie -apexchart() \%>\% +apexcharter() \%>\% ax_series(list( name = "rnorm", data = rnorm(10) )) # Two series -apexchart() \%>\% +apexcharter() \%>\% ax_series( list( name = "rnorm 1", diff --git a/man/unhcr_popstats_2017.Rd b/man/unhcr_popstats_2017.Rd new file mode 100644 index 0000000..e982cfc --- /dev/null +++ b/man/unhcr_popstats_2017.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{unhcr_popstats_2017} +\alias{unhcr_popstats_2017} +\title{UNHCR data for 2017} +\format{A data frame with 11237 observations on the following 6 variables. + \describe{ + \item{\code{country_origin}}{Country of origin of population} + \item{\code{country_residence}}{Country / territory of asylum/residence of population} + \item{\code{population_type}}{Populations of concern : Refugees, Asylum-seekers, Internally displaced persons (IDPs), Returned refugees, + Returned IDPs, Stateless persons, Others of concern.} + \item{\code{value}}{Number of people concerned} + \item{\code{continent_residence}}{Continent of origin of population} + \item{\code{continent_origin}}{Continent of residence of population} + }} +\source{ +UNHCR (The UN Refugee Agency) (\url{http://popstats.unhcr.org/en/overview}) +} +\usage{ +unhcr_popstats_2017 +} +\description{ +The dataset contains data about UNHCR's populations of concern for the year 2017. +} +\keyword{datasets}