Te presentamos
Tu nuevo asistente de presentaciones.
Perfecciona, mejora y adapta tus contenidos, busca imágenes relevantes y edita elementos visuales más rápido que nunca.
Búsquedas populares
Pour mieux suivre l'atelier...
Pourquoi utiliser R pour produire vos graphiques?
Fonction de traçage: "qplot" (quick plot)
Paquets requis
Solution avec jeu de données CO2:
Flexibilité, élégance et sex-appeal!
Charger et explorer le jeu de
données "iris":
Flux de travail divisé
Produire un diagramme de dispersion de base à l'aide d'un nouveau jeu de données:
Reproductibilité de votre
flux de travail
Un graphique est composé d'éléments distincts (couches) superposés:
1. Votre premier graphique R:
2. Grammaire des graphiques (grammar of graphics)
3. Sauvegarder vos graphiques
4. Détails esthétiques
5. Divers trucs cool
arguments:
Code et explications disponibles ici:
http://qcbs.ca/wiki/r_atelier3
Recommandations:
ggplot2 est hébergé sur github:
https://github.com/hadley/ggplot2
arguments:
Toé !
Syntaxe de base:
http://docs.ggplot2.org
Spécifier les groupes à distinguer:
Ajouter un "geom" de ligne:
Ajouter aes():
Ajouter un geom (e.g. linear smoothing):
1. Créer un graphique simple, assigné à un objet R
E.g. Graphique CO2 par "Type":
Produire un diagramme de dispersion avec des couleurs et des régressions linéaires (ou autre "smoothing") en utilisant un autre jeu de données:
e.g. changer le système de coordonnées
2. Ajouter des éléments graphiques et esthétiques
Objets géométriques (geoms)
"Aesthetics" (aes) rend les données visibles:
3. Répéter l'étape 2 jusqu'à satisfaction et imprimer votre chef-d'oeuvre!
Credits: Software and Programer Efficiency Group
Êtes-vous fan de Wes Anderson?
ggvegan! ...en développement sur Github!
Dans un script:
https://github.com/karthik/wesanderson
https://github.com/jrnold/ggthemes
Comment:
Explorer un nouveau type de "geom" et autres éléments graphiques avec votre propre jeu de données ou un des jeux suivants:
Thèmes de base:
N.B. Les formats vecteurs (pdf, svg, etc...) sont souvent plus avantageux que les formats rasters (jpeg, png, etc...).
Thèmes:
Autres méthodes:
Créer vos propres thèmes:
NB: vous pouvez aussi produire des biplots dans ggplot2 de base: il suffit d'extraire la position des objets et de créer votre diagramme de double projection un élément à la fois.
FORMAT EN LARGEUR
Transformez le jeu de données "degat.long" en format large:
Transformez le jeu de données "degat" en format long:
Installez et chargez le paquet:
C
Variable 1
Variable 2
Variable 3
ID variable (e.g. site)
> degat.large <- spread(degat.long, dimension, cm)
B
Format long
A
> degat.long <- gather(degat, dimension, cm, c(DHP, Haut))
Format large
A
Format long
B
Supposons que vous envoyez votre assistant de terrain pour faire la collecte de données des dimensions de plusieurs arbres sur un site de recherche, sois le diamètre à la hauteur de la poitrine (DHP) et la hauteur. Il vous revient avec ceci:
Format large
ID 1 Measured value Measured value Measured value
> install.packages("tidyr")
> library(tidyr)
ID 2 Measured value Measured value Measured value
Éparpillez le jeu de données "airquality" en format long. Ensuite, ramassez-le en format large pour retrouver le format original de "airquality".
ID 3 Measured value Measured value Measured value
Format large
Format long
# Notez que la syntaxe ici indique qu'on veut "ramasser" toutes les colonnes sauf "Month" et "Day", c'est donc l'équivalent de dire "c(Ozone, Solar.R, Temp, Wind)"
> degat <- data.frame( Species = c("Chêne", "Orme", "Frêne"),
DHP = c(12, 20, 13),
Haut = c(56, 85, 55))
Format long
Format large
Le paquet tidyr nous permet de modifier la structure des données tout en préservant l'information contenue dans le jeu de données
1. “ramasser” les données (gather)
large –> long
2. “éparpiller” les données (spread)
long –> large
Format en longueur: une colonne indiquant les variables possibles et une colonne avec les données associées aux variables.
Format en largeur: une colonne par variable ou facteur dans votre étude.
Le format en largeur peut-être utilisé pour des graphiques de base dans ggplot2, mais les diagrammes plus complexes requièrent le format en longueur. Exemples à venir!
plyr, lm(), glm() et gam() requièrent le format en longueur.
ID variable (e.g. site)
Factor
Measured value
Arguments de la fonction:
Arguments de la fonction:
Format large
ID 1 Variable 1 #
ID 1 Variable 2 #
ID 1 Variable 3 #
ID 2 Variable 1 #
ID 2 Variable 2 #
ID 2 Variable 3 #
ID 3 Variable 1 #
ID 3 Variable 2 #
ID 3 Variable 3 #
FORMAT EN LONGUEUR
Créez un jeu de données fictif sur les poissons et le zooplancton:
Ensuite, si on s'intéresse à la variable du temps (T1 et T2), on peut la séparer dans sa propre colonne:
En premier lieu, on ramasse le "gros.degat" pour le convertir en format long:
Nous pouvons également conserver les données en format en largeur si nous désirons construire des graphiques individuels pour chaque variable pour chaque jour de chacun des 5 mois.
Au lieu, nous pouvons convertir "airquality" en format en longueur afin d'utiliser facet_wrap() pour regrouper les panneaux par variables et non par mois.
head(airquality)
B
C
D
A
Nous pouvons utiliser la fonction grid.arrange() du paquet gridExtra pour créer des graphiques à panneaux multiples comme suit:
> gros.degat.long.sep <- separate(gros.degat.long, taxa, into = c("especes", "temps"), sep = "\\.")
> head(gros.degat.long.sep)
> gros.degat.long <- gather(gros.degat, taxa, count, -id, -trt)
> head(gros.degat.long)
"airquality" est dans un format large, c'est-à-dire que les variables (Ozone, Solar.R, Wind et Temp) occupent leur propre colonne.
air.long <- gather(airquality, variable, value, -Month, -Day)
air.large <- spread(air.long , variable, value)
> set.seed(8)
> gros.degat <- data.frame(id = 1:4,
trt = sample(rep(c('controle', 'culture'), each = 2)),
zooplancton.T1 = runif(4),
poisson.T1 = runif(4),
zooplancton.T2 = runif(4),
poisson.T2 = runif(4))
# Notez qu'on utilise "\\." au lieu de "." parce que dans le langage R, le point est une carte frime
library(gridExtra)
combo.box <- grid.arrange(ozone.box, solar.box, temp.box, wind.box, nrow = 2)
Utilisons ggplot2 pour créer des graphiques pour chaque variable.
Utilisez ensuite le format en longueur pour créer des graphiques dans ggplot2:
> ozone.graph <- ggplot(airquality, aes(x = Day, y = Ozone)) + geom_point() +
geom_smooth() + facet_wrap(~ Month, nrow = 2)
> solar.graph <- ggplot(airquality, aes(x = Day, y = Solar.R)) + geom_point() +
geom_smooth() + facet_wrap(~Month, nrow = 2)
> wind.graph <- ggplot(airquality, aes(x = Day, y = Wind)) + geom_point() +
geom_smooth() + facet_wrap(~Month, nrow = 2)
> temp.graph <- ggplot(airquality, aes(x = Day, y = Temp)) + geom_point() +
geom_smooth() + facet_wrap(~Month, nrow = 2)
> combo.facets <- grid.arrange(ozone.graph, solar.graph, wind.graph, temp.graph, nrow = 4)
fMonth <- factor(airquality$Month) # Convertit la variable "Month" en facteur.
ozone.box <- ggplot(airquality, aes(x = fMonth, y = Ozone)) + geom_boxplot()
solar.box <- ggplot(airquality, aes(x = fMonth, y = Solar.R)) + geom_boxplot()
temp.box <- ggplot(airquality, aes(x = fMonth, y = Temp)) + geom_boxplot()
wind.box <- ggplot(airquality, aes(x = fMonth, y = Wind)) + geom_boxplot()
Arguments de la fonction:
Notez, par contre, que contrairement à l'élément facet() dans ggplot2, les échelles des axes ne seront pas les mêmes dans chaque panneau.
fMonth.long <- factor(air.long$Month)
meteo <- ggplot(air.long, aes(x = fMonth.long, y = value)) +
geom_boxplot() +
facet_wrap(~ variable, nrow = 2)
Comparez le graphique "meteo" avec "combo.box".
Ici, nous utilisons une combinaison de grid.arrange() et facet_wrap(), un mélange qui laisse à désirer esthétiquement!
Les variables de l'objet meteo sont sur la même échelle en utilisant la fonction facet_wrap(). Ça peut être utile dans plusieurs circonstances, mais ça ne permet pas de voir toute la variation de la variable “Wind”. On peut "libérer" l'axe des y:
On peut aussi utiliser le format long pour créer un graphique qui inclut toutes les variables sur un seul panneau :
meteo <- meteo + facet_wrap(~variable, nrow = 2, scales = "free")
meteo2 <- ggplot(air.long, aes(x = Day, y = value, colour = variable)) +
geom_point() +
facet_wrap(~Month, nrow = 1)
Supposons qu'on s'intéresse aux périodes de canicules du mois d'août dans le jeu de données airquality:
Selection d'un sous-ensemble d'observations (rangées) correspondant à un critère:
Selection d'un sous-ensemble de variables (colonnes)
trier le contenu d'une colonne en ordre croissant (par défaut) ou décroissant (avec desc() ), alphabétiquement ou numériquement
Supposons qu'on s'intéresse à la variation de la variable Ozone avec le temps dans ''airquality''
Avez-vous déjà utilisé ces fonctions:
Paquets requis:
La mission dplyr:
Voici 4 verbes qui exécutent les opérations les plus commune :
Qu'avez-vous utilisé dans le passé?
arguments:
arguments:
arguments:
(... et pleuré un peu?)
Supposons qu'on vient juste d'importer un jeu de données un peu chaotique:
Créer des nouvelles variables (colonnes)
Quel code est plus élégant en votre opinion?
Et pour 10 étapes d'opérations?
Dans le jeu de données "airquality", la température est en degré Fahrenheit. Transformons la variable Temp en degré Celsius
Au lieu d'envelopper toutes les fonctions, on peut écrire les opérations en ordre d'exécutions et les relier à l'aide du “pipe” %>% :
On peut utiliser "arrange()" pour réarranger le jeu de données en ordre chronologique, soit en ordre croissant de "Month" et ensuite en ordre croissant de "Day"
Paquet requis
Supposons qu'on veut créer un sous-ensemble de airquality pour le mois de juin, et ensuite convertir la variable de la température en degré Celsius. On peut combiner deux verbes dplyr comme suit:
La vrai nature jedi du paquet dplyr se revèle lorsqu'on combine plusieurs verbes dplyr. dplyr nous permets aussi d'exécuter des opérations sur des sous-ensembles de nos jeux de données et d'agréger l'information:
OR
Habituellement, la manipulation d'un jeu de données requière plusieurs étapes. Le paquet magrittr nous permet de relier plusieurs verbes dplyr pour créer un pipeline.
# Notez l'absence du premier argument dans chaque fonction
arguments:
Ici, le "pipe" redirige la sortie (output) d'une fonction en amont vers l'entrée (input) d'une fonction en aval. En utilisant le "pipe", on peut lire et écrire les opérations dans le même ordre qu'elles sont exécutées.
Ceci est difficile à lire parce que l'ordre des opérations exécutées commence au centre et se lit vers l'extérieur jusqu'à la fonction enveloppant le tout
# inversez l'ordre de "Month" et "Day" dans la fonction pour voir le résultat
Exemple: supposons qu'on s'intéresse à la température moyenne et l'écart type pour chaque mois:
Crée des sommaires à l'aide de fonction d'aggrégation
dplyr offre beaucoup de fonctions puissantes que nous n'avons pas le temps de couvrir aujourd'hui
La fonction group_by() est très importante puisqu'elle nous permet d'exploiter la stratégie "Séparer-Appliquer-Combiner" facilement:
1. D'abord on doit créer des sous-ensembles pour chaque poussin à l'aide group_by()
2. Ensuite, on peut utiliser summarise() pour calculer la différence entre la masse maximum de chaque poussin
1. On utilise group_by() pour créer des sous-ensembles par ''Diet" ET ''Chick" (l'ordre est important)
2. On utlise summarise(), pour calculer la différence de masse entre la fin (last()) et le début (first() ) de l'étude
3. Finalement on utilise un 2e summarise() (par "Diet", le groupe restant) pour calculer la moyenne
En utilisant le jeu de données ChickWeight, créez un tableau sommaire nous indiquant, pour chaque Diet, la moyenne de la différence de masse entre la fin et le début de l'étude pour chaque poussin. Utilisez les verbes dplyr et le pipe %>%.
En utilisant le jeu de données "ChickWeight", créez un tableau sommaire dans lequel on retrouve la différence de masse entre le maximum et le minimum de la masse enregistré pour chaque poussin dans l'étude. Utilisez les verbes dplyr et le “pipe” %>%.
> mass_diff <- ChickWeight %>%
group_by(Chick) %>%
summarise(mass_diff = max(weight) - min(weight))
> mass_diff
diet_mass <- ChickWeight %>%
group_by(Diet, Chick) %>%
summarise(gain_masse = last(weight) - first(weight)) %>%
summarise(gain_moyen = mean(gain_masse))
diet_mass
Jetez un coup d'oeil sur le wiki pour des liens vers du matériels intéressants pour en apprendre davantage
INDICE 1 : Les fonctions dplyr first() et last() pourrait s'avérer utile
INDICE 2 : Au sein de "group_by()", on peut regrouper par plusieurs variables pour créer un "oignon", et chaque utilisation distinct de la fonction "summarise()" élimine une couche de l'oignon (en commençant par la couche extérieur, donc la dernière variable dans "group_by()")
# Notez: la différence entre le min et
le max de la masse ne correspond pas
nécéssairement avec le gain de masse entre le temps 0 et la fin de l'étude. Inspectez le poussin # 18!!!!!!!!!