% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/highcharter-helper.R
\name{highcharter-helpers}
\alias{highcharter-helpers}
\alias{hc_freq_by_year_ci}
\alias{hc_add_onclick_korap_search}
\title{Helper functions for producing highcharts}
\usage{
hc_freq_by_year_ci(
  df,
  as.alternatives = FALSE,
  ylabel = if (as.alternatives) "\%" else "ipm",
  smooth = FALSE,
  ...
)

hc_add_onclick_korap_search(hc)
}
\arguments{
\item{df}{data frame like the value of a \code{\link{frequencyQuery}}}

\item{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).}

\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}}}

\item{hc}{highchart}
}
\description{
Experimental convenience function for plotting typical frequency by year graphs with confidence intervals using highcharter.
\bold{Warning:} This function may be moved to a new package.

Adds on-click events to data points of highcarts that were constructed with
\code{\link{frequencyQuery}} or \code{\link{collocationScoreQuery}}. Clicks on data points
then launch KorAP web UI queries for the given query term and virtual corpus in
a separate tab.
}
\examples{
\donttest{year <- c(1990:2018)}\dontshow{year <- c(2013:2013)}
\donttest{alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")}\dontshow{alternatives <- c("macht []{0,3} Sinn")}
new("KorAPConnection", verbose = TRUE) \%>\%
  frequencyQuery(query = alternatives,
                 vc = paste("textType = /Zeit.*/ & pubDate in", year),
                 as.alternatives = TRUE) \%>\%
  hc_freq_by_year_ci(as.alternatives = TRUE)

\donttest{
kco <- new("KorAPConnection", verbose = TRUE)
expand_grid(
  condition = c("textDomain = /Wirtschaft.*/", "textDomain != /Wirtschaft.*/"),
  year = (2005:2011)
) \%>\%
  cbind(frequencyQuery(
    kco,
    "[tt/l=Heuschrecke]",
    paste0(.$condition, " & pubDate in ", .$year)
  ))  \%>\%
  hc_freq_by_year_ci()
}

\donttest{
library(highcharter)
library(tidyr)

new("KorAPConnection", verbose = TRUE) \%>\%
  collocationScoreQuery("Team", "agil", vc = paste("pubDate in", c(2014:2018)),
                        lemmatizeNodeQuery = TRUE, lemmatizeCollocateQuery = TRUE) \%>\%
                         pivot_longer(c("O", "E")) \%>\%
  hchart(type="spline", hcaes(label, value, group=name)) \%>\%
  hc_add_onclick_korap_search()
}

}
