Cet article fournit une galerie d’exemples de ggplots, notamment : des diagrammes de dispersion ou scatter plots, diagrammes de densité et histogrammes, diagrammes de barres et de lignes, barres d’erreur, box plots, violin plots et plus encore.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RPrérequis
Charger les packages requis et définir la fonction thème theme_bw()
comme thème par défaut:
library(tidyverse)
library(ggpubr)
theme_set(
theme_bw() +
theme(legend.position = "top")
)
Diagramme de dispersion
- Diagramme de dispersion basique avec coefficient de corrélation. La fonction
stat_cor()
[Package R ggpubr] est utilisée pour ajouter le coefficient de corrélation.
library("ggpubr")
p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
geom_smooth(method = lm) +
stat_cor(method = "pearson", label.x = 20)
p
- Zoom contextuel. Fonction R clé
facet_zoom()
[ggforce]
library(ggforce)
ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
geom_point() +
facet_zoom(x = Species == "versicolor")
- Encerclez quelques points. La fonction
geom_encircle()
[package R ggalt] peut être utilisée pour entourer un certain groupe de points
# Encerclez le groupe setosa
library("ggalt")
circle.df <- iris %>% filter(Species == "setosa")
ggplot(iris, aes(Petal.Length, Petal.Width)) +
geom_point(aes(colour = Species)) +
geom_encircle(data = circle.df, linetype = 2)
- Créez des points jitter pour éviter les chevauchements. Les points qui se chevauchent sont dispersés aléatoirement autour de leur position d’origine en fonction d’un seuil contrôlé par l’argument
width
dans la fonctiongeom_jitter()
# Diagramme de dispersion de base
ggplot(mpg, aes(cty, hwy)) +
geom_point(size = 0.5)
# Points jitter (dispersés)
ggplot(mpg, aes(cty, hwy)) +
geom_jitter(size = 0.5, width = 0.5)
- Créez des graphiques de comptage pour éviter les chevauchements. Là où il y a plus de chevauchement de points, la taille du cercle augmente.
ggplot(mpg, aes(cty, hwy)) +
geom_count()
- Graphique à bulles. Dans un graphique à bulles (bubble chart), la taille des points est contrôlée par une variable continue, ici
qsec
.
ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(size = qsec), alpha = 0.5) +
scale_size(range = c(0.5, 12)) # Réglage de la plage de tailles des points
- Graphiques de densité marginaux
library(ggpubr)
# Diagramme de dispersion groupé avec graphique de densité marginale
ggscatterhist(
iris, x = "Sepal.Length", y = "Sepal.Width",
color = "Species", size = 3, alpha = 0.6,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
margin.params = list(fill = "Species", color = "black", size = 0.2)
)
# Utiliser le box plot comme graphiques marginaux
ggscatterhist(
iris, x = "Sepal.Length", y = "Sepal.Width",
color = "Species", size = 3, alpha = 0.6,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
margin.plot = "boxplot",
ggtheme = theme_bw()
)
Distribution
Diagramme de densité
- Graphique de densité basique:
# Graphique de densité basique
ggplot(iris, aes(Sepal.Length)) +
geom_density()
# Ajouter la ligne moyenne
ggplot(iris, aes(Sepal.Length)) +
geom_density(fill = "lightgray") +
geom_vline(aes(xintercept = mean(Sepal.Length)), linetype = 2)
- Changer la couleur par groupe
# Modifier la couleur des lignes par groupe
ggplot(iris, aes(Sepal.Length, color = Species)) +
geom_density() +
scale_color_viridis_d()
# Ajouter une ligne moyenne par groupe
mu <- iris %>%
group_by(Species) %>%
summarise(grp.mean = mean(Sepal.Length))
ggplot(iris, aes(Sepal.Length, color = Species)) +
geom_density() +
geom_vline(aes(xintercept = grp.mean, color = Species),
data = mu, linetype = 2) +
scale_color_viridis_d()
Histogramme
- Histogrammemes basiques
# Histogrammeme basique avec ligne moyenne
ggplot(iris, aes(Sepal.Length)) +
geom_histogram(bins = 20, fill = "white", color = "black") +
geom_vline(aes(xintercept = mean(Sepal.Length)), linetype = 2)
# Ajouter des courbes de densité
ggplot(iris, aes(Sepal.Length, stat(density))) +
geom_histogram(bins = 20, fill = "white", color = "black") +
geom_density() +
geom_vline(aes(xintercept = mean(Sepal.Length)), linetype = 2)
- Changer la couleur par groupe
ggplot(iris, aes(Sepal.Length)) +
geom_histogram(aes(fill = Species, color = Species), bins = 20,
position = "identity", alpha = 0.5) +
scale_fill_viridis_d() +
scale_color_viridis_d()
QQ Plot
library(ggpubr)
ggqqplot(iris, x = "Sepal.Length",
ggtheme = theme_bw())
Distribution cumulative empirique (ECDF)
ggplot(iris, aes(Sepal.Length)) +
stat_ecdf(aes(color = Species)) +
scale_color_viridis_d()
Graphique de densité ridgeline
Le graphique de densité ridgeline est une alternative à la fonction standard geom_density() qui peut être utile pour visualiser les changements dans les distributions, d’une variable continue, dans le temps ou l’espace. Les graphiques ridgeline sont des line plots qui se chevauchent partiellement et donnent l’impression d’une chaîne de montagnes.
library(ggridges)
ggplot(iris, aes(x = Sepal.Length, y = Species)) +
geom_density_ridges(aes(fill = Species)) +
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
Bar plots et alternatives
- Data
df <- mtcars %>%
rownames_to_column() %>%
as_data_frame() %>%
mutate(cyl = as.factor(cyl)) %>%
select(rowname, wt, mpg, cyl)
df
## # A tibble: 32 x 4
## rowname wt mpg cyl
## <chr> <dbl> <dbl> <fct>
## 1 Mazda RX4 2.62 21 6
## 2 Mazda RX4 Wag 2.88 21 6
## 3 Datsun 710 2.32 22.8 4
## 4 Hornet 4 Drive 3.22 21.4 6
## 5 Hornet Sportabout 3.44 18.7 8
## 6 Valiant 3.46 18.1 6
## # … with 26 more rows
- Bar plot basique
# Bar plot basique
ggplot(df, aes(x = rowname, y = mpg)) +
geom_col() +
rotate_x_text(angle = 45)
# Ordonner les noms de lignes par valeurs mpg
ggplot(df, aes(x = reorder(rowname, mpg), y = mpg)) +
geom_col() +
rotate_x_text(angle = 45)
- Bar plot horizontaux
# Bar plot horizontaux,
# changer la couleur de remplissage par groupe et ajouter des étiquettes de texte
ggplot(df, aes(x = reorder(rowname, mpg), y = mpg)) +
geom_col( aes(fill = cyl)) +
geom_text(aes(label = mpg), nudge_y = 2) +
coord_flip() +
scale_fill_viridis_d()
- Classer les barres par groupes et par valeurs mpg
df2 <- df %>%
arrange(cyl, mpg) %>%
mutate(rowname = factor(rowname, levels = rowname))
ggplot(df2, aes(x = rowname, y = mpg)) +
geom_col( aes(fill = cyl)) +
scale_fill_viridis_d() +
rotate_x_text(45)
- Graphique lollipop (sucette) : Lollipop est une alternative aux bar plots lorsque vous disposez de grands jeux de données.
ggplot(df2, aes(x = rowname, y = mpg)) +
geom_segment(
aes(x = rowname, xend = rowname, y = 0, yend = mpg),
color = "lightgray"
) +
geom_point(aes(color = cyl), size = 3) +
scale_color_viridis_d() +
theme_pubclean() +
rotate_x_text(45)
- Bar plot avec plusieurs groupes
# Data
df3 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
# Bar plot empilés de y = counts par x = cut,
# coloré par la variable
ggplot(df3, aes(x = dose, y = len)) +
geom_col(aes(color = supp, fill = supp), position = position_stack()) +
scale_color_manual(values = c("#0073C2FF", "#EFC000FF"))+
scale_fill_manual(values = c("#0073C2FF", "#EFC000FF"))
# Utiliser position = position_dodge()
ggplot(df3, aes(x = dose, y = len)) +
geom_col(aes(color = supp, fill = supp), position = position_dodge(0.8), width = 0.7) +
scale_color_manual(values = c("#0073C2FF", "#EFC000FF"))+
scale_fill_manual(values = c("#0073C2FF", "#EFC000FF"))
Line plot
# Data
df3 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
# Line plot
ggplot(df3, aes(x = dose, y = len, group = supp)) +
geom_line(aes(linetype = supp)) +
geom_point(aes(shape = supp))
Barres d’erreur
- Data
# Données brutes
df <- ToothGrowth %>% mutate(dose = as.factor(dose))
head(df, 3)
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
# Statistiques descriptives
df.summary <- df %>%
group_by(dose) %>%
summarise(sd = sd(len, na.rm = TRUE), len = mean(len))
df.summary
## # A tibble: 3 x 3
## dose sd len
## <fct> <dbl> <dbl>
## 1 0.5 4.50 10.6
## 2 1 4.42 19.7
## 3 2 3.77 26.1
- Line plots et bar plots basiques avec barres d’erreur
# (1) Line plot
ggplot(df.summary, aes(dose, len)) +
geom_line(aes(group = 1)) +
geom_errorbar( aes(ymin = len-sd, ymax = len+sd),width = 0.2) +
geom_point(size = 2)
# (2) Bar plot
ggplot(df.summary, aes(dose, len)) +
geom_bar(stat = "identity", fill = "lightgray", color = "black") +
geom_errorbar(aes(ymin = len, ymax = len+sd), width = 0.2)
- Graphiques de lignes/barres groupées
# Préparation des données
df.summary2 <- df %>%
group_by(dose, supp) %>%
summarise( sd = sd(len), len = mean(len))
df.summary2
## # A tibble: 6 x 4
## # Groups: dose [3]
## dose supp sd len
## <fct> <fct> <dbl> <dbl>
## 1 0.5 OJ 4.46 13.2
## 2 0.5 VC 2.75 7.98
## 3 1 OJ 3.91 22.7
## 4 1 VC 2.52 16.8
## 5 2 OJ 2.66 26.1
## 6 2 VC 4.80 26.1
# (1) Line plot + barres d'erreur
ggplot(df.summary2, aes(dose, len)) +
geom_line(aes(linetype = supp, group = supp))+
geom_point()+
geom_errorbar(
aes(ymin = len-sd, ymax = len+sd, group = supp),
width = 0.2
)
# (2) Bar plots + barres d'erreur supérieures.
ggplot(df.summary2, aes(dose, len)) +
geom_bar(aes(fill = supp), stat = "identity",
position = position_dodge(0.8), width = 0.7)+
geom_errorbar(
aes(ymin = len, ymax = len+sd, group = supp),
width = 0.2, position = position_dodge(0.8)
)+
scale_fill_manual(values = c("grey80", "grey30"))
Box plots et alternatives
- Data
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
- Box plots basique
# Basique
ggplot(ToothGrowth, aes(dose, len)) +
geom_boxplot()
# Box plot + violon plot
ggplot(ToothGrowth, aes(dose, len)) +
geom_violin(trim = FALSE) +
geom_boxplot(width = 0.2)
- Ajoutez des points jitter et des dot plot
# Ajouter des points dispersés (jitter)
ggplot(ToothGrowth, aes(dose, len)) +
geom_boxplot() +
geom_jitter(width = 0.2)
# Dot plot + box plot
ggplot(ToothGrowth, aes(dose, len)) +
geom_boxplot() +
geom_dotplot(binaxis = "y", stackdir = "center")
- Plots groupés
# Box plots
ggplot(ToothGrowth, aes(dose, len)) +
geom_boxplot(aes(color = supp)) +
scale_color_viridis_d()
# Ajouter des points dispersés (jitter)
ggplot(ToothGrowth, aes(dose, len, color = supp)) +
geom_boxplot() +
geom_jitter(position = position_jitterdodge(jitter.width = 0.2)) +
scale_color_viridis_d()
Visualisation de données de séries temporelles
# Préparation des données
df <- economics %>%
select(date, psavert, uempmed) %>%
gather(key = "variable", value = "value", -date)
head(df, 3)
## # A tibble: 3 x 3
## date variable value
## <date> <chr> <dbl>
## 1 1967-07-01 psavert 12.6
## 2 1967-08-01 psavert 12.6
## 3 1967-09-01 psavert 11.9
# Graphique à lignes multiples
ggplot(df, aes(x = date, y = value)) +
geom_line(aes(color = variable), size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal()
matrice de diagramme de dispersion
library(GGally)
ggpairs(iris[,-5])+ theme_bw()
Analyse de corrélation
library("ggcorrplot")
# Calculer une matrice de corrélation
my_data <- mtcars[, c(1,3,4,5,6,7)]
corr <- round(cor(my_data), 1)
# Visualiser
ggcorrplot(corr, p.mat = cor_pmat(my_data),
hc.order = TRUE, type = "lower",
color = c("#FC4E07", "white", "#00AFBB"),
outline.col = "white", lab = TRUE)
Analyse de cluster
library(factoextra)
USArrests %>%
scale() %>% # Mettre les données à l'échelle
dist() %>% # Calculer la matrice de distance
hclust(method = "ward.D2") %>% # Cluster hiérarchique
fviz_dend(cex = 0.5, k = 4, palette = "jco") # Visualiser et couper
# en 4 Groupes
Balloon plot
Le Balloon plot (ou graphique en ballon) est une alternative aux bar plots pour visualiser une grande quantité de données catégorielles.
library(ggpubr)
# Préparation des données
housetasks <- read.delim(
system.file("demo-data/housetasks.txt", package = "ggpubr"),
row.names = 1
)
head(housetasks, 4)
## Wife Alternating Husband Jointly
## Laundry 156 14 2 4
## Main_meal 124 20 5 4
## Dinner 77 11 7 13
## Breakfeast 82 36 15 7
# Visualisation
ggballoonplot(housetasks, fill = "value")+
scale_fill_viridis_c(option = "C")
Version: English
No Comments