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)


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!






Cette page a été vue 28433 fois