highcharter-helper: add boolean parameter smooth
Setting it to TRUE (default: FALSE) plots a smoothed graph using the
highcharts plot types spline and areasplinerange.
Change-Id: I561feea14610015c3d201e26f39e266c845851e2
diff --git a/NEWS.md b/NEWS.md
index 72132f1..86807a0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,6 @@
+## Changes
+- New boolean parameter `smooth` added to `hc_freq_by_year_ci`
+
# RKorAPClient 0.5.7
## Changes
diff --git a/R/highcharter-helper.R b/R/highcharter-helper.R
index 4c40a92..3933e88 100644
--- a/R/highcharter-helper.R
+++ b/R/highcharter-helper.R
@@ -9,6 +9,7 @@
#' @param df data frame like the value of a \code{\link{frequencyQuery}}
#' @param as.alternatives boolean decides whether queries should be treated as mutually exclusive and exhaustive wrt. to some meaningful class (e.g. spelling variants of a certain word form).
#' @param ylabel defaults to \% if \code{as.alternatives} is \code{true} and to "ipm" otherwise.
+#' @param smooth boolean decides whether the graph is smoothed using the highcharts plot types spline and areasplinerange.
#' @param ... additional arguments passed to \code{\link{hc_add_series}}
#'
#' @examples
@@ -34,7 +35,10 @@
#' hc_freq_by_year_ci()
#' }
#'
-hc_freq_by_year_ci <- function(df, as.alternatives = FALSE, ylabel = if(as.alternatives) "%" else "ipm", ...) {
+hc_freq_by_year_ci <- function(df, as.alternatives = FALSE,
+ ylabel = if(as.alternatives) "%" else "ipm",
+ smooth = FALSE,
+ ...) {
title <- ""
df <- df %>%
{ if(! as.alternatives) ipm(.) else RKorAPClient::percent(.) }
@@ -62,7 +66,6 @@
palette <- c("#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#9467BD", "#8C564B", "#E377C2", "#7F7F7F", "#BCBD22", "#17BECF", "#AEC7E8", "#FFBB78", "#98DF8A", "#FF9896", "#C5B0D5", "#C49C94", "#F7B6D2", "#C7C7C7", "#DBDB8D", "#9EDAE5")
highcharter::highchart() %>%
hc_title(text=title) %>%
- hc_chart(zoomType="xy") %>%
hc_yAxis(
title = list(text = if (as.alternatives) "" else ylabel),
ceiling = if (as.alternatives) 100 else NULL,
@@ -73,6 +76,9 @@
hc_add_theme(hc_theme_google(colors=palette)) %>%
hc_plotOptions(
series = list(enabled = TRUE),
+ spline = list(cursor = 'pointer', point = list(events = list(
+ click = JS("function() { window.open(this.click, 'korap'); }")
+ ))),
line = list(cursor = 'pointer', point = list(events = list(
click = JS("function() { window.open(this.click, 'korap'); }")
)))) %>%
@@ -81,6 +87,7 @@
href = "https://github.com/KorAP/RKorAPClient/") %>%
hc_exporting(enabled = TRUE) %>%
hc_tooltip(
+ headerFormat = '<span style="font-size: 10pt">{point.key}</span><br/>',
formatter = JS(paste0("function (tooltip) {
var str = tooltip.defaultFormatter.call(this, tooltip);
if(Array.isArray(str)) {
@@ -96,14 +103,18 @@
shared = TRUE,
valueSuffix = paste0('\U2009', ylabel)
) %>%
- hc_add_series_korap_frequencies(df, as.alternatives, ...)
+ hc_add_series_korap_frequencies(df, smooth, as.alternatives, ...)
}
## Mute notes: "no visible binding for global variable:"
globalVariables(c("value", "query", "condition", "vc"))
-hc_add_series_korap_frequencies <- function(hc, df, as.alternatives = FALSE, ...) {
+hc_add_series_korap_frequencies <- function(hc, df, smooth = FALSE,
+ as.alternatives = FALSE,
+ ...) {
index <- 0
+ type <- ifelse(smooth, "spline", "line")
+ areatype <- ifelse(smooth, "areasplinerange", "arearange")
for(q in unique(df$condition)) {
dat <- df[df$condition==q,]
hc <- hc %>% hc_add_series(
@@ -116,7 +127,7 @@
click = dat$webUIRequestUrl
),
hcaes(year, value),
- type = 'line',
+ type = type,
colorIndex = index,
zIndex = 1,
...
@@ -125,7 +136,7 @@
name = "ci",
data = dat[,c('year', 'conf.low', 'conf.high')],
hcaes(x = year, low = conf.low, high = conf.high),
- type = 'arearange',
+ type = areatype,
fillOpacity = 0.3,
lineWidth = 0,
marker = list(enabled = FALSE),
diff --git a/man/hc_freq_by_year_ci.Rd b/man/hc_freq_by_year_ci.Rd
index 8e963fe..a0702e4 100644
--- a/man/hc_freq_by_year_ci.Rd
+++ b/man/hc_freq_by_year_ci.Rd
@@ -8,6 +8,7 @@
df,
as.alternatives = FALSE,
ylabel = if (as.alternatives) "\%" else "ipm",
+ smooth = FALSE,
...
)
}
@@ -18,6 +19,8 @@
\item{ylabel}{defaults to \% if \code{as.alternatives} is \code{true} and to "ipm" otherwise.}
+\item{smooth}{boolean decides whether the graph is smoothed using the highcharts plot types spline and areasplinerange.}
+
\item{...}{additional arguments passed to \code{\link{hc_add_series}}}
}
\description{