---
title: "Mapping - map variables to the chart"
author: "Victor Perrier"
date: "`r Sys.Date()`"
output: 
  rmarkdown::html_vignette:
    lib_dir: "billboarder"
vignette: >
  %\VignetteIndexEntry{Mapping - map variables to the chart}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, echo=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  screenshot.force = FALSE
)
library("billboarder")
```


## Introduction

There's 3 ways with `billboarder` to pass data to construct a chart :

* Use a `data.frame` with only variable that need to be used, typically for a barchart, the first column is used for x-axis, the second for y-axis.
* Pass your data to `billboarder` and use function `bb_aes` in a "pipe" flow.
* Use function `bbaes` inside chart builder helper such as `bb_barchart`, `bb_linechart`, ...


## Data

We'll use data about the french electricity production between 2012 and 2016 :

```{r}
data("prod_par_filiere")
str(prod_par_filiere)
```


## First method : use a `data.frame`

For creating this simple barchart, we need to use two columns of our `data.frame`

```{r}
billboarder() %>% 
  bb_barchart(data = prod_par_filiere[, c("annee", "prod_bioenergies")])
```

Variable `annee` is used on the x-axis, and `prod_bioenergies` as y values.


This is similar for line chart :

```{r}
billboarder() %>% 
  bb_linechart(data = prod_par_filiere[, c("annee", "prod_bioenergies")])
```


## Second method : with mapping

We can pass our data to function `billboarder` and then call `bb_aes` to specify which variable to use :

```{r}
billboarder(data = prod_par_filiere) %>% 
  bb_aes(x = annee, y = prod_bioenergies) %>% 
  bb_barchart()
```

You don't have to pass arguments to `bb_barchart`.


This is the same for line chart :

```{r}
billboarder(data = prod_par_filiere) %>% 
  bb_aes(x = annee, y = prod_bioenergies) %>% 
  bb_linechart()
```



## Third method : mapping inside function

Mapping can be specified inside the function which specify the type of chart :

```{r}
billboarder(data = prod_par_filiere) %>% 
  bb_barchart(mapping = bbaes(x = annee, y = prod_bioenergies))
```

The function to map variables is `bbaes` without underscore.

For line chart :

```{r}
billboarder(data = prod_par_filiere) %>% 
  bb_linechart(mapping = bbaes(x = annee, y = prod_bioenergies))
```



## Grouping variable

Construct a chart with groups differ between the first method and the others. For the first one, data need to be in 'wide' format, the other need data in 'long' format with a grouping variable.



With 'wide' data :

```{r}
billboarder() %>% 
  bb_barchart(
    data = prod_par_filiere[, c("annee", "prod_bioenergies", "prod_eolien", "prod_solaire", "prod_hydraulique")]
  )
```


with 'long' data :

```{r}
# prepare data
data("prod_filiere_long")
prod_filiere_long <- prod_filiere_long[
  prod_filiere_long$branche %in% c("bioenergies", "eolien", "solaire", "hydraulique"), 
]
head(prod_filiere_long)


billboarder(data = prod_filiere_long) %>% 
  bb_barchart(mapping = bbaes(x = annee, y = prod, group = branche))
```




## Mapping with programming

In Shiny app or in function, you can use `bbaes_string` or `bb_aes_string`, these function accept character instead of unquoted variable names :

```{r}
billboarder(data = prod_filiere_long) %>% 
  bb_barchart(mapping = bbaes_string(x = "annee", y = "prod", group = "branche"))
```




