ggplot2 échelle et transformation des axes - Logiciel R et visualisation de données


Ce tutoriel R décrit comment modifier les limites des axes x et y (valeurs minimales et maximales) en utilisant le package ggplot2. La transformation des axes (échelle logarithmique, racine carrée, …) et les axes pour des dates sont également couverts dans cet article.

Préparer les données

Le jeu de données ToothGrowth est utilisé dans les exemples ci-dessous :

# Convertir la variable dose de type "numeric" au type "factor"
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
head(ToothGrowth)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5
## 4  5.8   VC  0.5
## 5  6.4   VC  0.5
## 6 10.0   VC  0.5

Assurez-vous que la variable dose soit convertie en une variable de type “factor” en utilisant le script de R ci-dessus.

Exemple de graphes

library(ggplot2)
# Box plot 
bp <- ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()
bp
# Nuage de points
sp <- ggplot(cars, aes(x = speed, y = dist)) + geom_point()
sp

Changer les limites des axes x et y

Il existe différentes fonctions pour changer les limites des axes:

  • xlim() et ylim()
  • expand_limits()
  • scale_x_continuous() et scale_y_continuous()

Utiliser les fonctions xlim() et ylim()

Pour changer les limites d’un axe continu, les fonctions xlim() et ylim() peuvent être utilisées comme suit :

# Limites de l'axe des x
sp + xlim(min, max)
# Limites de l'axe des y
sp + ylim(min, max)

min et max sont les valeurs minimales et maximales de chaque axe.

# Box plot : changer les limites de l'axe des y
bp + ylim(0,50)
# Nuage de points : limites des axes x et y
sp + xlim(5, 40)+ylim(0, 150)

Utiliser la fonction expand_limts()

Notez que, la fonction expand_limits() peut être utilisée pour :

  • définir rapidement le point d’intersection des axes x et y à (0,0)
  • changer les limites des axes x et y
# Fixer l'intersection des axes x et y à (0,0)
sp + expand_limits(x=0, y=0)
# changer les limites des axes
sp + expand_limits(x=c(0,30), y=c(0, 150))

Utiliser les fonctions scale_xx()

Il est aussi possible d’utiliser les fonctions scale_x_continuous() et scale_y_continuous() pour changer les limites des axes x et y, respectivement.

Les formats simplifiés de ces fonctions sont:

scale_x_continuous(name, breaks, labels, limits, trans)
scale_y_continuous(name, breaks, labels, limits, trans)

  • name : étiquettes (titres) des axes x et y
  • breaks : pour contrôler les graduations et les traits de la grille. Parmi les valeurs possibles, il y a:
    • NULL : cache toutes les graduations
    • waiver() : graduations par défaut
    • un vecteur de type character ou numeric spécifiant les graduations à afficher
  • labels : étiquettes des graduations. Les valeurs possibles sont :
    • NULL: pas d’étiquettes
    • waiver(): étiquettes par défaut
    • un vecteur de caractère à utiliser comme étiquettes des graduations
  • limits : un vecteur numérique spécifiant les limites des axes x et y (min, max)
  • trans pour la transformation des axes. Les valeurs possibles sont “log2”, “log10”, …


Les fonctions scale_x_continuous() et scale_y_continuous() peuvent être utilisées comme suit :

# Changer les étiquettes et les limites des axes x et y
sp + scale_x_continuous(name="Speed of cars", limits=c(0, 30)) +
  scale_y_continuous(name="Stopping distance", limits=c(0, 150))

Transformation des axes

Les transformations log et sqrt

Les fonctions pour la transformations des axes sont:

  • scale_x_log10(), scale_y_log10() : pour la transformation log10
  • scale_x_sqrt(), scale_y_sqrt() : pour la transformation sqrt (racine carrée)
  • scale_x_reverse(), scale_y_reverse() : pour inverser les coordonnées
  • coord_trans(x =“log10”, y=“log10”) : les valeurs possibles pour x et y sont “log12”, “log10”, “sqrt”, …
  • scale_x_continuous(trans=‘log2’), scale_y_continuous(trans=‘log2’) : une autre valeur possible pour l’argument trans est ‘log10’

Ces fonctions peuvent être utilisées comme suit :

# Nuage de points par défaut
sp <- ggplot(cars, aes(x = speed, y = dist)) + geom_point()
sp
# Transformation log en utilisant scale_xx()
# valeurs possibles pour trans : 'log2', 'log10','sqrt'
sp + scale_x_continuous(trans='log2') +
  scale_y_continuous(trans='log2')
# Transformation sqrt
sp + scale_y_sqrt()
# Inverser les coordonnées
sp + scale_y_reverse() 

La fonction coord_trans() peut être utilisée aussi pour la transformation des axes

# Valeurs possibles pour x et y : "log2", "log10", "sqrt", ...
sp + coord_trans(x="log2", y="log2")

Formater les étiquettes des graduations des axes

Les étiquettes des graduations peuvent être formatées de manière à montrer des exposants. Le package scales est requis.

# Echelle log2 de l'axe des y (avec espacement visuelle égale)
library(scales)
sp + scale_y_continuous(trans = log2_trans())
# Montrer des exposants
sp + scale_y_continuous(trans = log2_trans(),
    breaks = trans_breaks("log2", function(x) 2^x),
    labels = trans_format("log2", math_format(2^.x)))

Notez que beaucoup de fonctions de transformation sont disponibles en utilisant le package scales: log10_trans(), sqrt_trans(), etc. Utiliser la commande help(trans_new) pour une liste complète.

Formater les étiquettes des axes :

library(scales)
# Pourcentage
sp + scale_y_continuous(labels = percent)
# dollar
sp + scale_y_continuous(labels = dollar)
# scientifique
sp + scale_y_continuous(labels = scientific)

Afficher des graduations log

Il est possible d’ajouter des graduations log en utilisant la fonction annotation_logticks().

Notez que ce type de graduations à un sens uniquement pour log base 10.

Le jeu de données Animals, dans le package MASS, est utilisé :

library(MASS)
head(Animals)
##                     body brain
## Mountain beaver     1.35   8.1
## Cow               465.00 423.0
## Grey wolf          36.33 119.5
## Goat               27.66 115.0
## Guinea pig          1.04   5.5
## Dipliodocus     11700.00  50.0

La fonction annotation_logticks() peut être utilisée comme suit :

library(MASS) # Accéder aux données Animals
library(scales) # Accéder aux fonctions de transformations 
# les axes x et y sont transformés et formatés
p2 <- ggplot(Animals, aes(x = body, y = brain)) + geom_point() +
     scale_x_log10(breaks = trans_breaks("log10", function(x) 10^x),
              labels = trans_format("log10", math_format(10^.x))) +
     scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),
              labels = trans_format("log10", math_format(10^.x))) +
     theme_bw()
# graphique log-log sans les étiquettes de graduations
p2
# Montrer les étiquettes de graduations
p2 + annotation_logticks()  

Notez que, par défaut les graduations log sont en bas et à gauche.

Pour spécifier le côté des graduations :

# Graduations à gauche et à droite
p2 + annotation_logticks(sides="lr")
# Tous les côtés
p2+annotation_logticks(sides="trbl")

Les valeurs possibles pour l’argument sides sont :

  • t : en haut
  • r : à droite
  • b : en bas
  • l : à gauche
  • la combinaison de t, r, b et l

Formater les axes pour des dates

Les fonctions scale_x_date() et scale_y_date() sont utilisées.

Exemple de données

Créer des données de série temporelle

df <- data.frame(
  date = seq(Sys.Date(), len=100, by="1 day")[sample(100, 50)],
  price = runif(50)
)
df <- df[order(df$date), ]
head(df)
##          date      price
## 22 2016-09-21 0.12484956
## 10 2016-09-22 0.39837832
## 40 2016-09-23 0.52704801
## 45 2016-09-25 0.05024957
## 32 2016-09-27 0.98075239
## 49 2016-09-28 0.64052733

Graphe avec des dates

dp <- ggplot(data=df, aes(x=date, y=price)) + geom_line()
dp

Formater les étiquettes de graduations

Charger le package scales pour le formatage.

library(scales)
# Format : month/day
dp + scale_x_date(labels = date_format("%m/%d")) +
  theme(axis.text.x = element_text(angle=45))
# Format : Week
dp + scale_x_date(labels = date_format("%W"))
# Months only
dp + scale_x_date(breaks = date_breaks("months"),
  labels = date_format("%b"))

Notez que, depuis ggplot2 v2.0.0, les échelles date et datetime possèdent les paramètres date_breaks, date_minor_breaks et date_labels. Vous n’avez donc plus besoin de scales::date_breaks() ou de scales::date_format().

Limite des axes pour des dates

Le jeu de données economic (package ggplot2) est utilisé :

head(economics)
##         date   pce    pop psavert uempmed unemploy
## 1 1967-07-01 507.4 198712    12.5     4.5     2944
## 2 1967-08-01 510.5 198911    12.5     4.7     2945
## 3 1967-09-01 516.3 199113    11.7     4.6     2958
## 4 1967-10-01 512.9 199311    12.5     4.9     3143
## 5 1967-11-01 518.1 199498    12.5     4.7     3066
## 6 1967-12-01 525.8 199657    12.1     4.8     3018

Créer le graphique de psavert en fonction de date:

  • date : Mois de collection des données
  • psavert : “personal savings rate”
# Graphe avec des dates
dp <- ggplot(data=economics, aes(x=date, y=psavert)) + geom_line()
dp
# Limites des axes c(min, max)
min <- as.Date("2002-1-1")
max <- max(economics$date)
dp+ scale_x_date(limits = c(min, max))

Aller plus loin

Voir aussi les fonctions scale_x_datetime() et scale_y_datetime() pour dessiner des graphiques contenant des dates et le temps.

Infos

Cette analyse a été réalisée avec le logiciel R (ver. 3.2.4) et le package ggplot2 (ver. 2.1.0)







Want to Learn More on R Programming and Data Science?

==> Subscribe to our Mailing List <==

* indicates required


 Get involved :
  Click to follow us on and Google+ :   
  Comment this article by clicking on "Discussion" button (top-right position of this page)
  Sign up as a member and post news and articles on STHDA web site.


Suggestions


ggplot2 couleurs : Changer les couleurs automatiquement et manuellement - Logiciel R et visualisation de données
ggplot2 graduation des axes : Guide pour personnaliser les étiquettes des graduations - Logiciel R et visualisation de données
ggplot2 légende : Modifier facilement la légende d'un graphique - Logiciel R et visualisation de données
ggplot2 barplots : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 - Combiner plusieurs graphiques sur la même page - Logiciel R et visualisation de données
ggplot2 titres : Titre principal, titre des axes et légendes - Logiciel R et visualisation de données
ggplot2 box plot : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 nuage de points: Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 textes : Ajouter du texte à un graphique - Logiciel R et visualisation de données
ggplot2 thèmes et couleurs de fond : les 3 éléments - Logiciel R et visualisation de données
ggplot2 barres d'erreur : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 graphique en camembert: Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 types de points - Logiciel R et visualisation de données
ggplot2 histogramme : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 - ajouter une ligne droite à un graphe : Ligne horizontale, verticale et droite de régression
ggplot2
ggplot2 graphique linéaire : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 dot plot : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données
ggplot2 type de traits : Comment changer le type de trait d'un graphique avec le logiciel R?
ggplot2 facet : diviser un graphique en plusieurs panneaux - Logiciel R et visualisation de données
ggplot2 ECDF graphique: Guide de démarrage rapide pour la fonction de répartition empirique - Logiciel R et visualisation de données
ggplot2 courbe de distribution : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 violin plot : Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 stripchart (jitter): Guide de démarrage rapide - Logiciel R et visualisation de données
ggplot2 pivoter un graphique : Inverser et retourner le graphique - Logiciel R et visualisation de données
ggplot2 qq plot (quantile - quantile plot) : Guide de démarrage rapide - Logiciel R et visualisation de données

Cette page a été vue 18640 fois
Licence - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions
Licence Creative Commons