Sommaire

  1. QUALITATIF
  2. QUANTITATIF

QUALITATIF

Diagramme en barres

##----
# BARPLOT (DIAGRAMME EN BARRES)
Modalites = c("Modalité A", "Modalité B", "Modalité C")
Pourcentages = c(30, 50, 20)
couleurs = c("pink", "cadetblue", "darkgreen")
Graphe = barplot(
  Pourcentages,
  col = couleurs,                   # Palette de couleurs
  border = F,                      # Pas de bordure autour des barres
  width = 1,                        # Largeur des barres
  names.arg = Modalites,            # Noms sous les barres
  main = "Répartition des Modalités", # Titre
  cex.names = 1.2,                  # Taille du texte des modalités
  cex.axis = 1 ,
  yaxt='n'  ,                       # Suppression de l'axe des ordonnées
  ylim = c(0, 60)
)
# Ajout des annotations de pourcentages au-dessus des barres
text(
  x = Graphe,       # Position sur l'axe des X
  y = Pourcentages + 2,              # Position légèrement au-dessus des barres
  labels = paste0(Pourcentages, " %"),# Texte affiché
  cex = 1.2,                         # Taille du texte
  col = "black",                     # Couleur du texte
  font = 2                           # Texte en gras
)

# DIAGRAMME EN BARRES EMPILEES
# Données
Modalites = c("Modalité A", "Modalité B", "Modalité C")
Pourcentages = c(30, 50, 20)
# Créer une matrice avec les pourcentages et les modalités comme noms de lignes
data = matrix(Pourcentages, 
              dimnames = list(Modalites))
# Création du graphique à barres empilées
BPempile <- barplot(
  data,                         # Pourcentages
  beside = FALSE,               # Barres empilées
  col = couleurs,               # Palette de couleurs
  border = NA,                  # Pas de bordure
  main = "Répartition des Modalités (Empilées)", # Titre
  cex.names = 1.2,              # Taille des noms des modalités
  ylim = c(0, 150),              # Ajuster les limites de l'axe Y si nécessaire
  yaxt="n"
)
# Ajouter les pourcentages au-dessus des barres
pos_y <- apply(data, 2, cumsum) - Pourcentages/2 # Calculer les positions verticales des textes
for (i in 1:3) {
  text(
    x = BPempile,                  # Position horizontale (x)
    y = pos_y[i],                           # Position verticale (y)
    labels = paste0(data[i], "%"),          # Texte avec pourcentage
    cex = 1.2,                              # Taille du texte
    col = "white",                          # Couleur du texte
    font = 2                               # Texte en gras
  )
}
# Ajouter la légende
legend(
  "topright", 
  legend = Modalites, 
  fill = couleurs, 
  title = "Modalités", 
  cex = 1.2
)

# Cas de plusieurs graphiques empilés
# Données
Modalites <- c("Modalité A", "Modalité B", "Modalité C")
Groupes <- c("Groupe 1", "Groupe 2", "Groupe 3")
couleurs <- c("pink", "cadetblue", "darkgreen")
# Données sous forme de matrice : chaque ligne correspond à une modalité et chaque colonne à un groupe
data <- matrix(
  c(30, 40, 50, 20, 30, 10, 50, 30, 40), # Chaque valeur est le pourcentage pour une modalité dans un groupe
  nrow = 3,                           # 3 modalités
  byrow = TRUE,                       # Remplir ligne par ligne
  dimnames = list(Modalites, Groupes)  # Nommer les lignes et colonnes
)
# Création du graphique en barres empilées
bar_positions <- barplot(
  data,
  beside = FALSE,                  # Barres empilées
  col = couleurs,                  # Palette de couleurs
  border = NA,                     # Pas de bordure
  main = "Répartition des Modalités (Empilées)", # Titre
  cex.names = 1.2,                 # Taille des noms des modalités
  ylim = c(0, 150),                # Ajuster les limites de l'axe Y si nécessaire
  yaxt = 'n'                       # Désactiver les ticks de l'axe Y
)

# Calculer les positions verticales pour ajouter les pourcentages au-dessus des barres
pos_y <- apply(data, 2, cumsum) - data / 2 # Calculer la position des pourcentages au milieu de chaque barre empilée

# Ajouter les pourcentages au-dessus des barres
for (i in 1:ncol(data)) {
  for (j in 1:nrow(data)) {
    text(
      x = bar_positions[i],                  # Position horizontale (x)
      y = pos_y[j, i],                       # Position verticale (y)
      labels = paste0(data[j, i], "%"),      # Texte avec pourcentage
      cex = 1.2,                             # Taille du texte
      col = "white",                         # Couleur du texte
      font = 2                               # Texte en gras
    )
  }
}

# Ajouter la légende
legend(
  "topleft", 
  legend = Modalites, 
  fill = couleurs, 
  title = "Modalités", 
  cex = 1.2
)

# AVEC GGPLOT2
# Charger la librairie ggplot2
library(ggplot2)
# Données
Modalites <- c("Modalité A", "Modalité B", "Modalité C")
Pourcentages <- c(30, 50, 20)
couleurs <- c("pink", "cadetblue", "darkgreen")
# Calcul des positions pour les pourcentages
position = cumsum(Pourcentages) - Pourcentages / 2
# Créer le graphique en secteurs
ggplot(data, aes(x = "", y = Pourcentages, fill = Modalites)) +
  geom_bar(stat = "identity", width = 1, color = "white") +  # Barres sans bordures visibles
  scale_fill_manual(values = couleurs) +                     # Couleurs personnalisées
  geom_text(aes(y = position-5, label = paste0(Pourcentages, "%")), 
            color = "white", fontface = "bold", size = 6) +  # Ajouter les pourcentages
  labs(title = "Répartition des Modalités") +                 # Titre du graphique
  theme(plot.title = element_text(size = 20, face = "bold", hjust = 0.5))

Graphique circulaire (pie)

### GRAPHIQUE CIRCULAIRE
Modalites = c("Modalité A", "Modalité B", "Modalité C")
Pourcentages = c(30, 50, 20)
couleurs = c("pink", "cadetblue", "darkgreen")
data = data.frame(Modalites, Pourcentages)
libelles = paste(Pourcentages, "%", sep="") 
pie(Pourcentages, labels = libelles, border = F, col=couleurs,
    main = "Représentation à l'aide d'un \n graphique circulaire")
legend("topleft", Modalites, cex=1, fill=couleurs)

# Graphique circulaire amélioré
pie(
  Pourcentages, 
  labels = libelles,               # Libellés combinant les modalités et les pourcentages
  border = "white",                # Bordures blanches pour mieux séparer les parts
  col = couleurs,                  # Palette de couleurs personnalisée
  radius = 1,                      # Rayon du camembert
  main = "Répartition des Modalités\n(Graphique Circulaire)", # Titre centré et clair
  cex.main = 1.2                   # Taille du titre
)

# Ajouter une légende
legend(
  "topleft",                      # Position de la légende
  legend = Modalites,              # Texte de la légende
  fill = couleurs,                 # Couleurs associées aux parts
  border = "black",                # Bordure pour chaque carré
  cex = 0.9,                       # Taille de la police
  box.lty = 1                      # Type de bordure de la légende
)

# Diagramme circulaire avec ggplot2
library(ggplot2)

ggplot(data, aes(x = "", y = Pourcentages, fill = Modalites)) +
  geom_bar(stat = "identity", width = 1, color = "white") +  # Ajout de bordures blanches
  coord_polar("y", start = 0) +                              # Transformation en camembert
  scale_fill_manual(values = couleurs) +                    # Palette de couleurs personnalisée
  geom_text(aes(label = paste0(Pourcentages, "%")),          # Libellés avec les pourcentages
            position = position_stack(vjust = 0.5),          # Placement centré sur chaque part
            color = "white", size = 5, fontface = "bold") +  # Couleur, taille, et style du texte
  labs(
    title = "Répartition des Modalités",
    subtitle = "Graphique circulaire illustrant les proportions",
    fill = "Modalités"
  ) +
  theme_void() +                                             # Suppression des axes pour un rendu épuré
  theme(
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5),   # Titre centré et en gras
    plot.subtitle = element_text(size = 12, hjust = 0.5),              # Sous-titre centré
    legend.title = element_text(face = "italic"),                     # Légende en italique
    legend.text = element_text(size = 10)                             # Texte de la légende ajusté
  )

Graphique circulaire (donut)

#  DONUT 
data$fraction = data$Pourcentages / sum(data$Pourcentages)
data$ymax = cumsum(data$fraction)
data$ymin = c(0, head(data$ymax, n=-1))
G = ggplot(data, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=Modalites)) 
G + geom_rect() + xlim(c(0, 4)) + coord_polar(theta="y") +
scale_fill_manual(values = couleurs) +
labs(title = "Représentation à l'aide d'un graphique circulaire") +
    theme_void() 

data$labelPosition <- (data$ymax + data$ymin) / 2
data$label <- paste0( "\n",data$Pourcentages, "% ")
data
##    Modalites Pourcentages fraction ymax ymin labelPosition  label
## 1 Modalité A           30      0.3  0.3  0.0          0.15 \n30% 
## 2 Modalité B           50      0.5  0.8  0.3          0.55 \n50% 
## 3 Modalité C           20      0.2  1.0  0.8          0.90 \n20%
G + geom_rect() + 
    geom_text( x=2, aes(y=data$labelPosition, label=data$label, color=Modalites), size=6) + scale_fill_manual(values = couleurs) + xlim(c(0, 4)) +
scale_color_manual(values = couleurs) +
labs(title = "Représentation à l'aide d'un graphique en anneau \n appelé également Donut") +
coord_polar(theta="y") +
theme_void() 

QUANTITATIF

NUAGE DE POINTS

n = 20
set.seed(0)
Volumes = c(rnorm(n = n, mean = 250, sd = 1 ))
plot(Volumes, pch=19, col="cadetblue",
     xlab="", main="Représentation à l'aide d'un nuage de points",
     xaxt="n")
grid()

NUAGE DE POINT (bis)

# Graphique avec personnalisation des points, ligne et titre
plot(Volumes, col = "darkgreen", pch = 16, 
     type="o",                        # Point reliés
     main = "Graphique des Volumes", 
     ylab = "Volumes (en litres)", 
     xlab = "", 
     ylim = c(248, 253),
     cex = 1.5,                      # Augmenter la taille des points
     col.main = "darkred",           # Couleur du titre
     col.lab = "darkgreen",          # Couleur des étiquettes
     lwd = 2,                        # Épaisseur de la ligne
     xaxt = "n",                     # Ne pas afficher les ticks x par défaut
     yaxt = "n")                     # Ne pas afficher les ticks y par défaut

# Personnalisation de l'axe des ordonnées (2)
axis(2, at = seq(248, 253, by = 1), col = "darkgreen", col.axis = "darkgreen") 
# Ajouter des lignes horizontales pointillées
abline(h = seq(248, 253, by = 1), col = "gray", lty = 2) 
abline(v = seq(1, n, by=1), col="gray", lty=2)

max(Volumes)
## [1] 252.4047
Max=max(Volumes)
rang = which(Volumes == Max) 
text(x = rang, y=max(Volumes)+0.1, paste0( "Max = ",round(Max,2) ))

Ajout d’une nouvelle série

Volumes_bis = rnorm(n = n, mean = 250, sd = 1)

plot(Volumes, pch=19, col="cadetblue",
     xlab="", main="Représentation à l'aide de nuage de points",
     xaxt="n",
     bty = "n")
abline(h = seq(248, 253, by = 1), col = "gray", lty = 2) 
abline(v = seq(1, n, by=1), col="gray", lty=2)
axis(1, at = seq(0, n, by = 1), col = "gray", col.axis = "gray", tick = F, cex.axis=0.8)
axis(2, at = seq(248, 253, by = 1), col = "gray", col.axis = "gray")
points(Volumes_bis, pch=19, col="pink")

Une autre solution …

plot(Volumes, xlab = "", main = "Nuage de points avec zone", 
     xaxt = "n", bty = "n", col="cadetblue", pch=19)
abline(h = seq(248, 253, by = 1), col = "gray", lty = 2)
abline(v = seq(1, n, by = 1), col = "gray", lty = 2)
axis(1, at = seq(1, n, by = 1), col = "gray", col.axis = "gray", tick = FALSE, cex.axis = 0.8)
axis(2, at = seq(248, 253, by = 1), col = "gray", col.axis = "gray")
couleur = rgb(237, 237, 237, maxColorValue = 255)
polygon(c(1:n, rev(1:n)), 
        c(Volumes, rev(Volumes_bis)), 
        col = couleur, border = NA)
points(1:n, Volumes_bis, col = "pink", pch=17)

Graphique animé

# Graphique animé
library(gganimate)
# Données
data <- data.frame(Index = 1:n, Volumes)
# Créer le graphique de base avec ggplot2
p <- ggplot(data, aes(x = Index, y = Volumes)) +
  geom_line(color = 'darkgreen', size = 1) +
  geom_point(color = 'darkgreen', size = 3) +
  labs(title = 'Graphique des Volumes Animé', x = 'Index', y = 'Volumes (en litres)') +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Animation
animation <- p + 
  transition_reveal(Index) +   # Révéler les points progressivement
  enter_fade() +               # Effet d'apparition
  exit_fade()                  # Effet de disparition
# Afficher l'animation
animate(animation, 
        nframes = 40,            # Nombre d'images
        fps = 1,                  # Nombre d'images par seconde
        end_pause = 10,           # temps d'affichage après la fin 
        rewind = F)               # Animation relancée ou pas
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

BOXPLOT

n = 20
set.seed(0)
Volumes = c(rnorm(n = n, mean = 250, sd = 1 ))

# Boxplot avec personnalisation
boxplot(Volumes, col="cadetblue", 
        ylim = c(248, 253),
        main = "Répartition des Volumes", 
        ylab = "Volumes (en litres)", 
        border = "gray",       # Bordure plus sombre pour l'esthétique
        whisklty = 1,              # Type de ligne des moustaches
        whiskcol = "gray",         # Couleur des moustaches
        staplelty = 2,             # Type de ligne des "moustaches" externes
        staplecol = "gray")         # Couleur des "moustaches" externes

# Boxplot avec nuage de points
boxplot(Volumes, col = "lightblue", main = "Boxplot avec nuage de points", 
        ylab = "Valeurs", ylim = c(min(Volumes) - 1, max(Volumes) + 1))
# Ajouter les points avec une légère dispersion (jitter)
points(jitter(rep(1, length(Volumes))), Volumes, col = "darkgreen", pch = 16)

# HISTOGRAMME
hist(Volumes, 
     main = "Histogramme des Volumes",         # Titre du graphique
     xlab = "Volumes (en litres)",             # Label pour l'axe X
     ylab = "Fréquence",                       # Label pour l'axe Y
     col = "lightblue",                        # Couleur des barres
     border = "white",                              # Couleur des bordures des barres
     breaks = 10,                              # Nombre de groupes (barres)
     cex.axis = 1.2,                           # Taille des axes
     cex.main = 1.5,                           # Taille du titre
     cex.lab = 1.2,                             # Taille des labels
     xlim = c(248, 252)
)
grid()

# Traitement de plusieurs variables 
n = 20
Lignes = c(rep("A",n), rep("B",n), rep("C",n))
Volumes = c(rnorm(n = n, mean = 250, sd = 1 ),
rnorm(n = n, mean = 250, sd = 2 ),
rnorm(n = n, mean = 250, sd = 3 ))
data = data.frame(Lignes, Volumes)

boxplot(data$Volumes ~ data$Lignes, col = couleurs, xlab="", ylab="",
        main = "Volumes en fonction des lignes de Production")
moyennes = tapply(Volumes, Lignes, mean)
points(moyennes, cex=2, pch=19)

# Nuage et boxplot avec GGPLOT
G =ggplot(data, aes(x= Lignes, y=Volumes)) +
    geom_point(aes(color = Lignes)) +
    scale_color_manual(values = couleurs) +
    theme(plot.title = element_text(face = "bold")) +
    ggtitle("Volumes par Ligne") 
G

G + geom_boxplot(aes(x = Lignes, y = Volumes), varwidth = T, alpha=0.2) +
theme(
    panel.border = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()  )