---
title: "Introduction ggplot2"
author: "Antoine Neuraz"
date: "16/11/2020"
output: 
  xaringan::moon_reader:
    css: ['default','css/my_style.css']
    lib_dir: libs
    seal: false
    nature:
      ratio: '4:3'
      countIncrementalSlides: false
      self-contained: true
      beforeInit: "addons/macros.js"
      highlightLines: true
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, fig.asp= .5)
library(ggplot2)
```

## ggplot2 implémente la grammaire de la visualisation 

## Les essentiels 

### Data: Données source. 
--

### Geoms: Marques de la visualisation (points, lignes, ...)
--

### Scales: Echelles de la visualisation (position, taille, couleur,...)

---
## ggplot2 implémente la grammaire de la visualisation 

## Les bonus

### Stats: Opérations de modification des données sources (moyenne, ...)

--

### Faceting: Découpe le dataset pour créer des sous-graphes

--
### Coordinates: système de coordonnées de la visualisation 

---
class:
# Architecture d'un graph avec ggplot2

```{r, eval = FALSE}

ggplot(data = <DATA.FRAME>, # chargement des données
       aes(x=<VARIABLE1>,   # définition des aesthetics (aes)
           y=<VARIABLE2>,   # = échelles
           ...), # grand nombre d'aesthetics existent
       ) + 
  geom_<*>()

```

---
# Ressources


### Reference: [https://ggplot2.tidyverse.org/reference/]()

### aesthetics: [https://frama.link/tidyverse-aesthetics]()



---

## La base

.small[
```{r, fig.asp=0.7}
data("iris")

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width))
```
]
---

## Ajouter une geometrie

.small[
```{r, fig.asp=0.7}
ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width)) + # le plus ajoute un layer
  geom_point()                              #<<
```
]

---
## Ajouter une géométrie [2]
.small[
```{r, fig.asp=0.7}

ggplot(iris) + 
  geom_point(aes(x=Sepal.Length, #<<
           y=Sepal.Width))       #<<
```
]

---
# Ajouter un encodage (aesthetics)
.small[
```{r, fig.asp=0.7}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +   #<<
  geom_point() 
```
]
---
## Ajouter une 2ème géométrie

.small[
```{r, fig.asp=0.7}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point() +
  geom_smooth()                #<<

```
]



---
## Régler les options de la géométrie

.small[
```{r, fig.asp=0.7}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point() +
  geom_smooth(method='lm', se=FALSE) #<<           

```
]

---
## Ajouter une facette

.small[
```{r, fig.asp=0.7}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point() +
  geom_smooth(method='lm', se=FALSE) + 
  facet_grid(~Species)               #<<
```
]
---
## Régler le thème

.small[
```{r, fig.asp=0.7}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point() +
  geom_smooth(method='lm', se=FALSE) + 
  facet_grid(~Species) +
  theme_minimal() #<<

```
]

---
## Régler les titres et labels

.small[
```{r}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point()+
  theme_minimal() +
  labs(title = "Sépales des iris", #<<
       subtitle = "Longueur et largeur des sépales* en fonction de l'espèce", #<<
       x= "Longueur", #<<
       y = "Largeur", #<<
       caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset" #<<
  ) #<<
```
]

---
## Ajuster la légende

.small[
```{r}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point()+
  theme_minimal() +
  labs(title = "Sépales des iris",
       subtitle = "Longueur et largeur des sépales* en fonction de l'espèce",
       x= "Longueur",
       y = "Largeur",
       caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset"
  ) + 
  guides(color = guide_legend(title = "Espèce")) #<<
  
```
]
---
## Paufiner le thème

.small[
```{r}

ggplot(iris, 
       aes(x=Sepal.Length, 
           y=Sepal.Width,
           color = Species)) +  
  geom_point()+
  theme_minimal() +
  labs(title = "Sépales des iris",
       subtitle = "Longueur et largeur des sépales* en fonction de l'espèce",
       x= "Longueur",
       y = "Largeur",
       caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset"
  ) + 
  guides(color = guide_legend(title = "Espèce")) + 
  theme(panel.grid.minor = element_blank(), #<<
        legend.position = "bottom") #<<
  
```
]
---
# A l'aide !!!

### site du tidyverse: [https://ggplot2.tidyverse.org]()

### R for datascience: [https://r4ds.had.co.nz/]()

### stackoverfow: [https://stackoverflow.com]()

### votre moteur de recherche préféré

---
# TODO

### Ouvrir le dataset "mtcars"

### représenter le "Gross horsepower" en fonction du nombre de cylindres

### utiliser l'encodage multiple sur le nombre de cylindres

### ajouter l'information du nombre de carburateurs

### Paufiner le plot (axes, titres, thème)

---
# TODO 2

### représenter la distribution du nombre de miles per gallon en histogramme

### représenter la distribution du nombre de miles per gallon en boxplot

### representer la distribution du nombre de miles per gallon en fonction du nombre de cylindres

### ajouter les points par dessus la distribution 

### paufiner le plot (axes, titres, thème)


