ggplot2 textes : Ajouter du texte à un graphique - Logiciel R et visualisation de données


Cet article d?crit comment ajouter du texte ? un graphique g?n?rer en utilisant le package ggplot2.

Les fonctions ci-dessous peuvent ?tre utilis?es:

  • geom_text(): Ajouter du text directement ? un graphique
  • geom_label(): Trace un rectangle sous le texte , ce qui rend plus facile la lecture.
  • annotate(): Utile pour ajouter des petites annotations de texte ? un endroit particulier sur le graphique
  • annotation_custom(): Ajoute des annotations statiques ? la m?me position sur chaque pannel graphique.

Pr?parer des donn?es

Nous allons utiliser un ?chantillon du jeu de donn?es mtcars. La fonction sample() peut ?tre utilis?e pour extraire 10 lignes:

# Subset 15 rows
set.seed(1234)
ss <- sample(1:32, 10)
df <- mtcars[ss, ]

Ajouter du texte avec les fonctions geom_text et geom_label

library(ggplot2)
# Simple nuage de points
sp <- ggplot(df, aes(wt, mpg, label = rownames(df)))+
  geom_point()
# Ajouter du texte
sp + geom_text()
# Changer la taille du texte
sp + geom_text(size=6)
# Changer l'ajustement vertical et horizontal
sp +  geom_text(hjust=0, vjust=0)
# Changer la police. Valeurs possibles : 1(normal),
# 2(bold), 3(italic), 4(bold.italic)
sp + geom_text(aes(fontface=2))

  • Changer la police
sp + geom_text(family = "Times New Roman")
  • geom_label() fonctionne come geom_text() mais dessine un rectangle autour de chaque ?tiquette. Cela est utile lorsque les donn?es sont denses sur le graphique.
sp + geom_label()


D?autres arguments utiles de geom_text() et de geom_label() sont:

  • nudge_x et nudge_y: pour decaler les textes et les points correspondants. La fonction position_nudge() peut aussi ?tre utilis?e.
  • check_overlap = TRUE: pour ?viter le ch?vauchement des points et des textes
  • hjust et vjust peut ?tre une vecteur de caract?re (ggplot2 v >= 2.0.0): ?left?, ?center?, ?right?, ?bottom?, ?middle?, ?top?. De nouvelles options sont ?inward? et ?outward? qui aligne le texte vers et depuis le centre du graphique, respectivement.


Changer la couleur et la taille du text par groupe

Il est possible de changer l?apparence du texte en utilisant les ?aesthetics? (color, size,?) :

sp2 <- ggplot(mtcars, aes(x=wt, y=mpg, label=rownames(mtcars)))+
  geom_point()
# Colorer en fonction du groupe
sp2 + geom_text(aes(color=factor(cyl)))

# Changer la taille du texte en utilisant une variable continue
sp2 + geom_text(aes(size=wt))

sp2 + geom_text(aes(size=wt)) + scale_size(range=c(3,6))

Ajouter du texte ? un point particulier

Les fonctions geom_text() et annotate() peuvent ?tre utilis?es :

# Solution 1
sp2 + geom_text(x=3, y=30, label="Scatter plot")
# Solution 2
sp2 + annotate(geom="text", x=3, y=30, label="Scatter plot",
              color="red")

annotation_custom : Ajouter une annotation statique en haut-droite, haut-gauche, ?

Les fonctions annotation_custom() et textGrob() sont utilis?es pour ajouter des annotations statiques qui sont au m?me endroit dans tous les panels. Le package grid est n?cessaire :

library(grid)
# Cr?er un ?lement textuel
grob <- grobTree(textGrob("Scatter plot", x=0.1,  y=0.95, hjust=0,
  gp=gpar(col="red", fontsize=13, fontface="italic")))
# Ajouter au graphique
sp2 + annotation_custom(grob)

Facet : Dans le graphique ci-dessous, l?annotation est ? la m?me place (dans chaque panel) m?me si les ?chelles des axes varient.

sp2 + annotation_custom(grob)+facet_wrap(~cyl, scales="free")

ggrepel: Reduction du chevauchement des textes

Il y a deux fonctions importantes dans le package R ggrepel:

  • geom_label_repel()
  • geom_text_repel()

Nuage de points avec annotation

Nous commen?ons par cr?er un simple nuage de points en utilisant un ?chantillon du jeu de donn?es mtcars, contenant 15 lignes.

  1. Preparation des donn?es:
# Prendre 15 lignes
set.seed(1234)
ss <- sample(1:32, 15)
df <- mtcars[ss, ]
  1. **Cr?er un nuage de points*:
p <- ggplot(df, aes(wt, mpg)) +
  geom_point(color = 'red') +
  theme_classic(base_size = 10)
  1. Ajouter du texte:
# Ajouter du texte avec ggplot2::geom_text
p + geom_text(aes(label = rownames(df)),
              size = 3.5)

# Utiliser ggrepel::geom_text_repel
require("ggrepel")
set.seed(42)
p + geom_text_repel(aes(label = rownames(df)),
                    size = 3.5) 

# Utiliser ggrepel::geom_label_repel and 
# Changer la couleur par groupes
set.seed(42)
p + geom_label_repel(aes(label = rownames(df),
                    fill = factor(cyl)), color = 'white',
                    size = 3.5) +
   theme(legend.position = "bottom")

Volcano plot

genes <- read.table("https://gist.githubusercontent.com/stephenturner/806e31fce55a8b7175af/raw/1a507c4c3f9f1baaa3a69187223ff3d3050628d4/results.txt", header = TRUE)
genes$Significant <- ifelse(genes$padj < 0.05, "FDR < 0.05", "Not Sig")
ggplot(genes, aes(x = log2FoldChange, y = -log10(pvalue))) +
  geom_point(aes(color = Significant)) +
  scale_color_manual(values = c("red", "grey")) +
  theme_bw(base_size = 12) + theme(legend.position = "bottom") +
  geom_text_repel(
    data = subset(genes, padj < 0.05),
    aes(label = Gene),
    size = 5,
    box.padding = unit(0.35, "lines"),
    point.padding = unit(0.3, "lines")
  )

source

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 20314 fois
Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
Licence Creative Commons