ggplot2 textes : Ajouter du texte à un graphique - Logiciel R et visualisation de données
- Pr?parer des donn?es
- Ajouter du texte avec les fonctions geom_text et geom_label
- Changer la couleur et la taille du text par groupe
- Ajouter du texte ? un point particulier
- annotation_custom : Ajouter une annotation statique en haut-droite, haut-gauche, ?
- ggrepel: Reduction du chevauchement des textes
- Infos
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.
- Preparation des donn?es:
# Prendre 15 lignes
set.seed(1234)
ss <- sample(1:32, 15)
df <- mtcars[ss, ]
- **Cr?er un nuage de points*:
p <- ggplot(df, aes(wt, mpg)) +
geom_point(color = 'red') +
theme_classic(base_size = 10)
- 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")
)
Infos
Cette analyse a ?t? r?alis?e avec le logiciel R (ver. 3.2.4) et le package ggplot2 (ver. 2.1.0)
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
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!
Recommended for You!
Click to follow us on Facebook:
Comment this article by clicking on "Discussion" button (top-right position of this page)