Skip to Tutorial Content

Cliquer ici pour les diapos de cours

Pour cette partie nous allons continuer à travailler sur le jeu de données potions.

Pour tous les exercices de cette partie, les packages dplyr et ggplot2 ainsi que le jeu de données potions seront d’ores et déjà chargés et disponibles dans l’environnement.

5.1 Premier graphique: histogramme simple

Complétez le code ci-dessous pour tracer l’histogramme correspondant à la propriété p_alteration (couleur de remplissage: blue).

ggplot(_____, aes(x=____)) +
  geom_histogram(fill=_____)
ggplot(potions, aes(x=p_alteration)) +
  geom_histogram(fill="blue")

5.2 Choix de geom

5.3 Geoms en tous genres

Complétez le code pour créer les graphiques suivants (il y a à chaque fois 3 éléments importants à spécifier: le jeu de données, les variables x et (éventuellement) y, et la nature du geom!):

-un nuage de points montrant p_alteration (y) en fonction de p_resistance (x)

ggplot(potions, aes(x=___, y=___)) +
   ____()
ggplot(potions, aes(x=p_resistance, y=p_alteration)) +
   geom_point()
  • un boxplot montrant p_alteration (y) en fonction de m_formule (x)
ggplot(___________________________) +
  ______()
ggplot(potions, aes(x=m_formule, y=p_alteration)) +
  geom_boxplot()
  • p3, un barplot (geom_bar()) montrant les effectifs de m_preparation (x)
______________________________________
  _____________
ggplot(potions, aes(x=m_preparation)) +
  geom_bar()

5.4 Paramétrer des geoms

On a repris les 3 graphiques créés précédemment, mais cette fois on souhaite paramétrer les geoms. Complétez le code pour que

  • les points soient bleus
ggplot(potions, aes(x=p_resistance, y=p_alteration)) +
   geom_point(_____)
ggplot(potions, aes(x=p_resistance, y=p_alteration)) +
   geom_point(color="blue")
  • l’intérieur des boîtes soit rouge
ggplot(potions, aes(x=m_formule, y=p_alteration)) +
  geom_boxplot(_____)
ggplot(potions, aes(x=m_formule, y=p_alteration)) +
  geom_boxplot(fill="red")
  • les barres soient transparentes (à 50%)
ggplot(potions, aes(x=m_preparation)) +
  geom_bar(_____)
ggplot(potions, aes(x=m_preparation)) +
  geom_bar(alpha=0.5)

5.5 Superposer des geoms

Complétez le code pour représenter la variable i_aile_papillon du jeu de données potions en superposant deux geoms:

  • un geom de type histogram, et de couleur de remplissage jaune
  • un geom de type rug
_____________________+
  _______________+
  ___________
ggplot(potions, aes(x=i_aile_papillon)) +
  geom_histogram(fill="yellow") +
  geom_rug()

5.6 Mapping

Complétez le code ci-dessous pour que les trois graphiques soient trois nuages de points représentant la propriété d’invisibilité (p_invisibilite, en y) en fonction de la quantité d’aile de papillon (i_aile_papillon, en x), et

  • la couleur du geom_point() corresponde à la formule (variable m_formule)
ggplot(potions, aes(x=___, y=___)) +
  geom_point(aes(____))
ggplot(potions, aes(x=i_aile_papillon, y=p_invisibilite)) +
  geom_point(aes(color=m_formule))
  • la taille du geom_point() corresponde à la résistance (variable p_resistance)
ggplot(________, aes(_____________))+
  geom_point(_________)
ggplot(potions, aes(x=i_aile_papillon, y=p_invisibilite))+
  geom_point(aes(size=p_resistance))
  • les deux conditions précédentes soient remplies pour le geom_point()
p3 <- ggplot(____________________________)+
   ________(__________)
ggplot(potions, aes(x=i_aile_papillon, y=p_invisibilite))+
   geom_point(aes(color=m_formule,size=p_resistance))

5.7 Paramètres fixes vs paramètres variables

Modifiez le code ci-dessous pour que la forme des points corresponde à un carré plein (voir l’antisèche ggplot2…)

Si vous définissez le paramètre comme une constante, vous devez le spécifier à l’extérieur de la fonction aes()…

ggplot(potions, aes(x=i_aile_papillon, y=p_invisibilite))+
  geom_point(aes(size=p_resistance, color=m_formule))
ggplot(potions, aes(x=i_aile_papillon, y=p_invisibilite))+
  geom_point(shape=15,
             aes(size=p_resistance, color=m_formule))

5.8 Esthétique globale ou propre à un geom

Considérez les lignes de codes suivantes:

p <- ggplot(potions, aes(x=m_preparation, y=p_resistance, color=m_formule))+
  geom_boxplot(fill="grey") +
  geom_rug()

5.9 Ajustement de la position

Examinez le code ci-dessous et le graphique qu’il renvoie.

Corrigez ce code pour que les effectifs des différentes coupes apparaissent les uns à côté des autres (paramètre position… consultez votre antisèche!!)

Vous pouvez voir les valeurs possibles pour ce paramètre sur votre antisèche ggplot (2ème page, “Position Adjustments”)

Attention, le paramètre de position n’est pas une esthétique…

ggplot(potions, aes(x=p_resistance))+
  geom_histogram(bins=10,aes(fill=m_formule))
ggplot(potions, aes(x=p_resistance))+
  geom_histogram(bins=10, position="dodge",aes(fill=m_formule))

5.10 Facettes

Complétez le code ci-dessous pour produire différentes facettes du même graphique en fonction du mode de préparation de la potion (3 lignes, 1 colonne)

Faites en sorte que les facettes soient en ligne et non en colonne dans l’appel à la fonction facet_grid()…

ggplot(potions, aes(x=i_givreboises, y=p_alteration, color=m_formule)) +
  geom_point() +
  ____________
ggplot(potions, aes(x=i_givreboises, y=p_alteration, color=m_formule)) +
  geom_point() +
  facet_grid(rows=vars(m_preparation))

5.11 Allonger son tableau pour facetter

Imaginons maintenant que l’on veuille montrer le lien entre la méthode de confection de la potion (m_preparation et m_formule) et les ingrédients, de sorte que chaque ingrédient corresponde à une facette du graphique.

Cela implique que le jeu de données soit reformaté de manière à ce que l’ensemble des valeurs d’ingrédients corresponde à une même variable i_valeur(et on aura donc son pendant i_type, qui nous dira de quel ingrédient il s’agit).

On a donc besoin d’utiliser la fonction tidyr::pivot_longer(). Complétez le script ci-après pour réaliser cette opération.

potions_long=potions %>% 
  tidyr::pivot_longer(cols=___,
                      ____="i_type",
                      names_prefix="i_",
                      ____="i_valeur")

potions_long %>%
  select(i_type,i_valeur) %>% 
  head()
potions_long=potions %>% 
  tidyr::pivot_longer(cols=starts_with("i_"),
                      names_to="i_type",
                      names_prefix="i_",
                      values_to="i_valeur")
potions_long %>%
  select(i_type,i_valeur) %>% 
  head()

Ci-après, le tableau potions_long a déjà été créé pour vous. Complétez le code pour créer des facettes correspondant à chaque type d’ingrédient.

library(ggplot2)
library(dplyr)
potions <- readr::read_delim("http://perso.ens-lyon.fr/lise.vaudor/grimoireStat/datasets/potions.csv",
                             delim=";")
ggplot(potions_long,
       aes(x=m_preparation, y=i_valeur, fill=m_formule))+
  geom_boxplot()+
  scale_y_log10()+
  facet_wrap(___,
             scales="free_y")
ggplot(potions_long,
       aes(x=m_preparation, y=i_valeur, fill=m_formule))+
  geom_boxplot()+
  scale_y_log10()+
  facet_wrap(vars(i_type),
             scales="free_y")

5.12 Etiquettes et transformation d’axes

Modifiez le code ci-dessous pour que:

  • les étiquettes d’axes soient “Mode de préparation” (en x) et “Pouvoir d’altération” (en y)
  • l’échelle des y soit transformée par une transformation log10
  • les valeurs de l’axe x soient retranscrites (en “Par bouillon”,“Par distillation”,“Par macération”)

Consultez l’antisèche ggplot2!!!

p <- ggplot(potions, aes(x=m_preparation, y=i_pied_lutin)) +
  geom_boxplot(fill="pink") +
  labs(____) +
  scale_y___()+
  scale_x____(___)
plot(p)
p <- ggplot(potions, aes(x=m_preparation, y=i_pied_lutin)) +
  geom_boxplot(fill="pink") +
  labs(x="Mode de préparation",y="Pouvoir d'altération") +
  scale_y_log10()+
  scale_x_discrete(labels=c("bouillon"="Par bouillon",
                          "distillation"="Par distillation",
                          "maceration"="Par macération"))
plot(p)

5.13 Echelles de couleurs

Imaginons que je souhaite produire un nuage de points montrant p_resistance en fonction de i_graisse_troll, en faisant varier la couleur en fonction de p_conjuration.

5.14 Thème et échelle de couleur

Modifiez le code qui vous est fourni ci-dessous pour reproduire cette figure.

Il s’agit de

  • modifier le thème
  • modifier l’échelle colorée pour que les quantités les plus basses correspondent à la couleur jaune et les plus hautes à la couleur bleue.

ggplot(potions, aes(x=m_formule,
                        y=p_conjuration,
                        color=i_larmes_crocodile))+
  geom_jitter() +
  __________()+
  __________(_______)
ggplot(potions,
       aes(x=m_formule,
           y=p_conjuration,
           color=i_larmes_crocodile))+
  geom_jitter() +
  theme_minimal()+
  scale_color_gradient(low="yellow",high="blue")

5.15 Rajout d’un nuage de points montrant les moyennes

Complétez le code ci-dessous pour rajouter des points bleus montrant les moyennes de propriété (donc moyennes de y) par mode de préparation.

# Vers données "en long" avec variables p_type et p_valeur
potions_long=potions %>% 
  tidyr::pivot_longer(cols=___,
                      names_to="p_type",
                      names_prefix="p_",
                      values_to="p_valeur")

# Calcul des moyennes de propriété par type de propriété
potions_moy <- potions_long %>%
     group_by(____) %>%
     summarise(p_moy=mean(____),
               .groups="drop")

ggplot(potions_long,
            aes(x=p_type,y=p_valeur)) +
  geom_boxplot()+
  geom_point(data=____,
             aes(y=___),
             col="blue")+
  coord_flip()
# Vers données "en long" avec variables p_type et p_valeur
potions_long=potions %>% 
  tidyr::pivot_longer(cols=starts_with("p_"),
                      names_to="p_type",
                      names_prefix="p_",
                      values_to="p_valeur")

# Calcul des moyennes de propriété par type de propriété
potions_moy <- potions_long %>%
     group_by(p_type) %>%
     summarise(p_moy=mean(p_valeur),
               .groups="drop")

ggplot(potions_long,
            aes(x=p_type,y=p_valeur)) +
  geom_boxplot()+
  geom_point(data=potions_moy,
             aes(y=p_moy),
             col="blue")+
  coord_flip()

Restart: graphiques