Chapitre-II Les Graphiques statiques

“Une image vaut mille mots”
Proverbe
“La plus grande valeur d’une image, c’est quand elle nous oblige à constater ce que nous ne nous attendions jamais à voir.”
John Tukey
library(fontawesome)
library(ggplot2)
library(kableExtra)
library(ggthemes)
library(WDI)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(scales)
library(forcats)
library(likert)
## Loading required package: xtable
## 
## Attaching package: 'likert'
## The following object is masked from 'package:dplyr':
## 
##     recode
library(scales)
library(forcats)
library(ggpmisc)
## Loading required package: ggpp
## 
## Attaching package: 'ggpp'
## The following object is masked from 'package:ggplot2':
## 
##     annotate
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble  3.1.2     v purrr   0.3.4
## v tidyr   1.1.3     v stringr 1.4.1
## v readr   2.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x ggpp::annotate()    masks ggplot2::annotate()
## x readr::col_factor() masks scales::col_factor()
## x purrr::discard()    masks scales::discard()
## x dplyr::filter()     masks stats::filter()
## x dplyr::group_rows() masks kableExtra::group_rows()
## x dplyr::lag()        masks stats::lag()
## x likert::recode()    masks dplyr::recode()
library(ggparliament)

Nous initialisons le thème qui sera utilisé pour tous les graphiques de ce chapitre

# Je crée mon thème à partir du thème par défaut "theme_gray" moyennant quelques modifications

Conrad_Theme <- function (base_size = 12, base_family = "Roboto Condensed") {
  half_line <- base_size/2
  theme(
    line = element_line(color = "black", size = .5,
                        linetype = 1, lineend = "butt"),
    rect = element_rect(fill = "white", color = "black",
                        size = .5, linetype = 1),
    text = element_text(family = base_family, face = "italic",
                        color = "black", size = base_size,
                        lineheight = .9, hjust = .5, vjust = .5,
                        angle = 0, margin = margin(), debug = FALSE),
    axis.line = element_blank(),
    axis.line.x = NULL,
    axis.line.y = NULL,
    axis.text = element_text(size = 10, color = "#3C6E71"),
    axis.text.x = element_text(margin = margin(t = .8 * half_line/2),
                               vjust = 1),
    axis.text.x.top = element_text(margin = margin(b = .8 * half_line/2),
                                   vjust = 0),
    axis.text.y = element_text(margin = margin(r = .8 * half_line/2),
                               hjust = 1),
    axis.text.y.right = element_text(margin = margin(l = .8 * half_line/2),
                                     hjust = 0),
    axis.ticks = element_line(color = "#3C6E71", size = .7),
    axis.ticks.length = unit(half_line / 1.5, "pt"),
    axis.ticks.length.x = NULL,
    axis.ticks.length.x.top = NULL,
    axis.ticks.length.x.bottom = NULL,
    axis.ticks.length.y = NULL,
    axis.ticks.length.y.left = NULL,
    axis.ticks.length.y.right = NULL,
    axis.title.x = element_text(color = "#3C6E71", hjust=1,
                                vjust = 1, size = 10,
                                face = "bold.italic"),
    axis.title.x.top = element_text(margin = margin(b = half_line),
                                    vjust = 0),
    axis.title.y = element_text(color = "#3C6E71", angle = 90, vjust = 1,
                                hjust=.5, size = 10, face = "bold.italic"),
    axis.title.y.right = element_text(angle = -90, vjust = 0,
                                      margin = margin(l = half_line)),
    legend.background = element_rect(color = NA),
    legend.spacing = unit(.4, "cm"),
    legend.spacing.x = NULL,
    legend.spacing.y = NULL,
    legend.margin = margin(.2, .2, .2, .2, "cm"),
    legend.key = element_rect(fill = "#FFE5D9", color = "#FFE5D9"),
    legend.key.size = unit(1.2, "lines"),
    legend.key.height = NULL,
    legend.key.width = NULL,
    legend.text = element_text(color="#3C6E71", size = rel(.8)),
    legend.text.align = NULL,
    legend.title = element_text(color="#3C6E71", hjust = 0, face="bold.italic"),
    legend.title.align = NULL,
    legend.position = "top",
    legend.direction = NULL,
    legend.justification = "center",
    legend.box = NULL,
    legend.box.margin = margin(0, 0, 0, 0, "cm"),
    legend.box.background = element_blank(),
    legend.box.spacing = unit(.4, "cm"),
    panel.background = element_rect(fill = "#FEEAFA", color = NA),
    panel.border = element_rect(color = "#FFFFFF",
                                fill = NA, size = .7),
    panel.grid.major = element_line(color = "#FEEAFA", size = .1, linetype = "dotted"),
    panel.grid.minor = element_line(color = "#FEEAFA", size = .1,
                                    linetype = "dotted"),
    panel.spacing = unit(base_size, "pt"),
    panel.spacing.x = NULL,
    panel.spacing.y = NULL,
    panel.ontop = FALSE,
    strip.background = element_rect(fill = "white", color = "gray30"),
    strip.text = element_text(color = "black", size = base_size),
    strip.text.x = element_text(margin = margin(t = half_line,
                                                b = half_line)),
    strip.text.y = element_text(angle = -90,
                                margin = margin(l = half_line,
                                                r = half_line)),
    strip.text.y.left = element_text(angle = 90),
    strip.placement = "inside",
    strip.placement.x = NULL,
    strip.placement.y = NULL,
    strip.switch.pad.grid = unit(0.1, "cm"),
    strip.switch.pad.wrap = unit(0.1, "cm"),
    plot.background = element_rect(color = "#FEEAFA"),
    plot.title = element_text(size = 12, hjust = 0, colour = "#3C6E71", 
                              vjust = 1, face = "bold",
                              margin = margin(b = half_line * 1.2)),
    plot.title.position = "panel",
    plot.subtitle = element_text(size = 10, colour = "#3C6E71", face="bold.italic",
                                 hjust = 0, vjust = 1,
                                 margin = margin(b = half_line * .9)),
    plot.caption = element_text(size = 10, colour = "red", face="italic",
                                hjust = 0, vjust = 1,
                                margin = margin(t = half_line * .9)),
    plot.caption.position = "panel",
    plot.tag = element_text(size = rel(1.2), hjust = .5, vjust = .5),
    plot.tag.position = "topleft",
    plot.margin = margin(base_size, base_size, base_size, base_size),
    complete = TRUE
  )
}

theme_set(Conrad_Theme())
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## i Please use the `linewidth` argument instead.
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## i Please use the `linewidth` argument instead.
Mes_couleurs <- c("#202020",  "#20BF55", "#832161", 
                  "#FFD100", "#564787", "#OD21A1", 
                  "#75C9C8")

scale_colour_discrete <- function(...) {
  scale_colour_manual(..., values = Mes_couleurs)
}

II-1 Les Oppositions

Les oppositions mettent l’accent sur les variations positives et négatives (+/-) à partir d’un point de référence fixe. Généralement, le point de référence est zéro, mais il peut également s’agir d’un objectif (target) ou d’une moyenne à long terme. Ces visualisations peuvent également être utilisées pour décrire des sentiments (positif/neutre/négatif)

II-1-1 Le graphique à barres divergentes

C’est un graphique à barres standard qui peut gérer à la fois les valeurs de magnitude négatives et positives notez bien que les informations sont en valeurs absolues.

En guise de préparation des données, téléchargeons et attachons le package WDI qui contient les données de la banque mondiale sur les économies des pays de ses pays membres (World Development Indicators series and country information). nous sélectionnons le cameroun et nous choisissons la variable BN.CAB.XOKA.CD qui représente le solde annuel du compte courant sur la période.

WDI_data_CMR <- WDI(
  country = "CMR",
  indicator = "BN.CAB.XOKA.CD", #Current account balance (BoP, current US$)
  start = 1960,
  end = 2022,
  extra = FALSE,
  cache = NULL,
  latest = NULL,
  language = "en"
)%>%filter(year>=2006)%>%
  mutate(Année=year, 
         Solde_Cpte_Courant=round(BN.CAB.XOKA.CD/1000000, digits = 0), 
         Situation_Balance=if_else(BN.CAB.XOKA.CD>0,"Excédant", "Déficit"))%>%
  select(Année, Solde_Cpte_Courant, Situation_Balance)

head(WDI_data_CMR)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
Année Solde_Cpte_Courant Situation_Balance
2021 -1795 Déficit
2020 -1512 Déficit
2019 -1695 Déficit
2018 -1409 Déficit
2017 -950 Déficit
2016 -1037 Déficit

Nous pouvons sur la base de ce tableau final faire le graphique à barres divergentes

color <- ifelse(WDI_data_CMR$Situation_Balance == "Déficit", "#202020", "#FFD100")

ggplot(WDI_data_CMR, aes(x = reorder(Année, Solde_Cpte_Courant), y = Solde_Cpte_Courant)) +
  geom_bar(stat = "identity",
           show.legend = TRUE,
           fill = color,      # Background color
           color = "white") +
  geom_text(aes(label = Solde_Cpte_Courant,
                hjust = ifelse(Solde_Cpte_Courant < 0, 1.5, -1),
                vjust = 0.5),
            size = 3) +
  ggtitle(label=expression(paste(bold(underline("Visualisation 1:")),bold("graphique à barres divergentes"))), 
          subtitle ="(Le solde de la balance courante du Cameroun est structurellement déficitaire jusqu'en 2006)")+
  labs(x="Année", y="Solde_Cpte_Courant(En $US Courant)", caption = expression(paste(italic(underline("Source:")),italic(" Données issues de 'WDI_data' du package WDI de R, Banque Mondiale"))))+
  coord_flip()+ 
  scale_y_continuous(breaks= seq(-2000, 300, by = 300),
                     limits = c(min(WDI_data_CMR$Solde_Cpte_Courant) - 50,
                                max(WDI_data_CMR$Solde_Cpte_Courant) + 50))+
  Conrad_Theme()

II-1-2 Le graphique à barres divergentes empilées

Ce type de graphique est parfait pour présenter des résultats d’enquête qui impliquent un sentiment (par exemple, en désaccord, neutre, d’accord). en feet, Un graphique à barres divergentes empilées est un graphique qui utilise des barres pour montrer des comparaisons entre des catégories de données, mais avec la possibilité de décomposer et de comparer des parties d’un tout dans une gradation qui va du moins bon (négatif) vers le très bon (positf) . Chaque barre du graphique représente un tout, et les segments de la barre représentent différentes parties ou catégories de ce tout.

Ici nous utilisons les données d’enquête sur la qualité de l’éducation dans des écoles d’un district des états USA.

library(likert)
library(scales)
library(forcats)
data("pisaitems")
items28 <- pisaitems[, substr(names(pisaitems), 1, 5) == "ST24Q"]
items282<-items28%>%tidyr::gather(schools, opinion, ST24Q01:ST24Q11)%>%filter(!opinion=="NA")
school_quality_summary<-items282%>%dplyr::group_by(schools, opinion)%>%count(name = "n_answers") %>% 
  group_by(schools) %>%mutate(percent_answers = n_answers / sum(n_answers, na.rm = TRUE)) %>% 
  ungroup() %>%mutate(percent_answers_label = percent(percent_answers, accuracy = 1))

  school_quality_summary_diverging <- school_quality_summary %>%
  mutate(percent_answers = if_else(opinion %in% c("Agree", "Strongly agree"), percent_answers, -percent_answers)) %>% 
  mutate(percent_answers_label = percent(percent_answers, accuracy = 1))

  school_quality_summary_diverging_good_labels <- school_quality_summary_diverging %>%
    mutate(percent_answers_label = abs(percent_answers)) %>% 
    mutate(percent_answers_label = percent(percent_answers_label, accuracy = 1))
  
  school_quality_summary_diverging_right_order <- school_quality_summary_diverging_good_labels %>% 
    mutate(opinion = fct_relevel(opinion, "Strongly disagree", "Disagree", "Agree", "Strongly agree"),
           opinion = fct_rev(opinion)) 
  
  
  head(school_quality_summary_diverging_right_order)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
schools opinion n_answers percent_answers percent_answers_label
ST24Q01 Agree 20000 0.3053855 31%
ST24Q01 Disagree 23515 -0.3590570 36%
ST24Q01 Strongly agree 7029 0.1073277 11%
ST24Q01 Strongly disagree 14947 -0.2282298 23%
ST24Q02 Agree 20935 0.3193453 32%
ST24Q02 Disagree 23811 -0.3632162 36%
school_quality_summary_diverging_right_order %>%
  ggplot(aes(x = schools, 
             y = percent_answers,
             fill = opinion)) +
  geom_col() +
  geom_text(aes(label = percent_answers_label), position = position_stack(vjust = 0.5), color="white") +
  coord_flip() +
  scale_x_discrete() +
  scale_fill_manual(breaks = c("Strongly disagree", "Disagree", "Agree", "Strongly agree"),
                    values = c(
                      "Strongly disagree" = "#202020",  
                      "Disagree" = "#20BF55", 
                      "Agree" = "#832161", 
                      "Strongly agree" = "#FFD100"
                    )) +
  ggtitle(label=expression(paste(bold(underline("Visualisation 2:")),bold("graphique à barres divergentes empilées"))), 
          subtitle ="(Comment qualifierez-vous la qualité de l'éducation dans votre école?)")+
  labs(x="School_Name", fill=NULL, caption = expression(paste(italic(underline("Source:")),italic(" Données issues de 'pisaitems' du package likert de R"))))+
  Conrad_Theme()

### II-1-3 Le graphique Déficit/Excédant à barres

Ce type de graphique est fait pour présenter l’evolution des performances commerciales dans le temps. il peut s’agir de celle d’une entreprise (Recettes-Dépenses) ou alors celles d’une nation (Exportations-Importations) il permet également de regarder les performances par rapport à un objectif qu’on s’est fixé (Ventes Réelles - Prévisions de Vente). il est approprié lorsque le temps est discret (Année, Trimestre, Mois…) pour les valeurs infinitésimales du temps il faut utiliser une courbe (Cf. section suivante)

Dans cet exemple nous allons analyser les importations et les exportations du Cameroun depuis (1977) date à partir de laquelle les statistiques sont disponibles.

EXP_IMP <- WDI(
  country = "CMR",
  indicator = c("BX.GSR.GNFS.CD", "BM.GSR.TOTL.CD"), #Exportations & importation of goods and services  
  start = 1960,
  end = 2022,
  extra = FALSE,
  cache = NULL,
  latest = NULL,
  language = "en"
)
EXP_IMP2<-EXP_IMP%>%filter(year>=1977)%>%
  mutate(Année=year, 
         Surplus_Deficit=BX.GSR.GNFS.CD-BM.GSR.TOTL.CD)%>%
         mutate(Situation_BC=if_else(Surplus_Deficit>0,"Excédant", "Déficit"))%>%
  select(Année, Surplus_Deficit, Situation_BC)
head(EXP_IMP2)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
Année Surplus_Deficit Situation_BC
1977 -132693103 Déficit
1978 -203717289 Déficit
1979 -138161775 Déficit
1980 -493185438 Déficit
1981 -505204674 Déficit
1982 -393480036 Déficit
EXP_IMP5<-EXP_IMP%>%filter(year>=1977)%>%
  mutate(Année=year, 
         EXP=round(BX.GSR.GNFS.CD/1000000, digits = 0),
         IMP=round(BM.GSR.TOTL.CD/1000000, digits = 0))%>%
  mutate(SOLDE=(EXP-IMP))%>%select(Année, EXP, IMP, SOLDE)%>%tidyr::gather(Indicateur, Montant, EXP:SOLDE)

head(EXP_IMP5)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
Année Indicateur Montant
1977 EXP 971
1978 EXP 1302
1979 EXP 1706
1980 EXP 2058
1981 EXP 1800
1982 EXP 1785

On obtient les graphiques suivants:

color <- ifelse(EXP_IMP2$Situation_BC == "Déficit", "#832161", "#202020")
ggplot(EXP_IMP2, aes(Année, Surplus_Deficit))+
  geom_bar(stat = "identity", position = "dodge",fill = color, color = "white") + 
  scale_y_continuous(labels = unit_format(unit = "M", prefix = "$"))+
  ggtitle(label=expression(paste(bold(underline("Visualisation 3:")),bold("graphique Déficit/Excédant à barres"))), 
          subtitle ="(Depuis 1977, le Cameroun a toujours eu un solde commercial déficitaire sauf en 1995)")+
  labs(fill=NULL, caption = expression(paste(italic(underline("Source:")),italic(" Données issues de 'WDI_data' du package de R (Banque Mondiale)"))))+
  Conrad_Theme()

ggplot(EXP_IMP5, aes(Année, Montant, fill = Indicateur))+  
  geom_bar(stat = "identity", position = "dodge" , color = "white")+
  scale_y_continuous(labels = unit_format(unit = "K", scale = 1e-09, prefix = "$"))+
  scale_fill_manual(values= c("#832161", "#202020", "#FFD100"))+
  ggtitle(label=expression(paste(bold(underline("Visualisation 4:")),bold("graphique Déficit/Excédant à barres"))), 
          subtitle ="(Le Cameroun est un pays qui dépend fortement de l'extérieur et donc très exposé aux fluctuation des cours mondiaux et aux crises)")+
  labs(fill=NULL, caption = expression(paste(italic(underline("Source:")),italic(" Données issues de 'WDI_data' du package de R (Banque Mondiale)"))))+
  Conrad_Theme() 

### II-1-4 Le graphique Déficit/Excédant en surface

Pour des besoins d’apprentissage nous allons un peu manipuler les données ci-dessus pour créer des valeur fictives des surplus en ajoutant 500 000 000 de dollars US à chacune des valeurs précédentes.

EXP_IMP3<-EXP_IMP2%>%
  mutate(Surplus_Deficit2=Surplus_Deficit+500)%>%
         mutate(Situation_BC2=if_else(Surplus_Deficit2>0,"Excédant", "Déficit"))%>%
  select(Année, Surplus_Deficit2, Situation_BC2)
head(EXP_IMP3)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
Année Surplus_Deficit2 Situation_BC2
1977 -132692603 Déficit
1978 -203716789 Déficit
1979 -138161275 Déficit
1980 -493184938 Déficit
1981 -505204174 Déficit
1982 -393479536 Déficit

On obtient le graphique suivant:

ggplot(data = EXP_IMP3, aes(x = Année, y = Surplus_Deficit2)) + 
  geom_line(color="white", size=2) + 
  geom_hline(yintercept = 0) + #deficit ribbon below
  geom_ribbon(aes(ymin = ifelse(Surplus_Deficit2 < 0, Surplus_Deficit2, 0), 
                  ymax = 0, 
                  fill = "Déficit")) +
  geom_ribbon(aes(ymin = 0,
                  ymax = ifelse(Surplus_Deficit2 > 0, Surplus_Deficit2, 0), 
                  fill = "Excédant")) +
  scale_y_continuous(labels = unit_format(unit = "K", scale = 1e-09, prefix = "$"))+
  scale_fill_manual(values=c("#202020", "#FFD100"))+
  ggtitle(label=expression(paste(bold(underline("Visualisation 5:")),bold("graphique Déficit/Excédant à barres"))), 
          subtitle ="(Evolution des profits et pertes annuelles)")+
  labs(fill=NULL, caption = expression(paste(italic(underline("Source:")),italic(" Données Fictives pour illustrer un cas d'école"))))+
  Conrad_Theme() 

II-1-4 Le Spline

Le spline est un type de graphique qui divise une seule valeur en 2 composants contrastés (par exemple Homme/Femme). il ressemble au graphique à barre divergentes mais contrairement à ce dernier, les valeurs représentées sont relatives et les positifs (respectivement négatifs) ne sont pas groupés entre eux.

Préparation des données

H_F <- WDI(
  country = c("CMR", "GAB", "CAF", "CG", "GQ"),
  indicator = c("BI.EMP.PWRK.PB.FE.ZS", "BI.EMP.PWRK.PB.MA.ZS"), #Exportations & importation of goods and services  
  start = 1960,
  end = 2022,
  extra = FALSE,
  cache = NULL,
  latest = NULL,
  language = "en"
)
  
  H_F2<-H_F%>%mutate(FEMME=round(runif(nrow(H_F), min=40, max=49), digits=2))%>%
  mutate(HOMME=100-FEMME)%>%select(year, country, FEMME, HOMME)%>%filter(year==max(year))%>%
  tidyr::gather(genre, Proportion, FEMME:HOMME)%>%
  mutate(Taux_Femme = ifelse(genre == "HOMME",
                                 Proportion,
                                 -1*Proportion))%>%
    select(country, genre, Proportion, Taux_Femme)

head(H_F2)%>%
  kbl(caption = "Tableau final après traitement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Tableau final après traitement
country genre Proportion Taux_Femme
Cameroon FEMME 41.12 -41.12
Central African Republic FEMME 41.41 -41.41
Congo FEMME 45.40 -45.40
Equatorial Guinea FEMME 40.77 -40.77
Gabon FEMME 40.98 -40.98
Cameroon HOMME 58.88 58.88

On obtient le graphique suivant:

Seuil_valeur <- pretty(H_F2$Taux_Femme)
ggplot(H_F2, aes(x = country, y = Taux_Femme, fill=genre)) +
  geom_hline(yintercept = 0)+
  geom_bar(stat = "identity",      # Background color
           show.legend = TRUE,
           color = "white") +
  scale_y_continuous(breaks = Seuil_valeur,
                     labels = abs(Seuil_valeur))+
  geom_text(aes(label = paste(Proportion, "%", sep="")), position = position_stack(vjust = 0.5),
            size = 4, color="white") +
  ggtitle(label=expression(paste(bold(underline("Visualisation 5:")),bold("graphique Spline"))), 
          subtitle ="(Le genre dans l'administration en Afrique Centrale en 2020)")+
  labs(x="Pays", y="Genre dans l'ADM", caption = expression(paste(italic(underline("Source:")),italic(" Données issues de 'WDI_data' du package WDI de R, Banque Mondiale"))))+
  coord_flip()+
  Conrad_Theme()+
  scale_fill_manual(values = c("#202020", "#FFD100"))

II-2 Les Correlations

Ces graphiques servent à montrer la relation entre deux variables ou plus. Gardez à l’esprit que, à moins que vous ne leur disiez le contraire, de nombreux lecteurs supposeront que les relations que vous leur montrez sont causales (c’est-à-dire que l’une cause l’autre).

II-2-1 Le nuage de points

C’est la manière standard de montrer la relation entre deux variables quantitatives.

La base de données Iris est utilisée à cet effet

head(iris)%>%
  kbl(caption = "Base de données Iris") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Base de données Iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa

On en deduit le nuage de points ci-dessous

iris%>%ggplot(aes(Sepal.Length - 5, Sepal.Width - 2, col = Species)) +
  geom_quadrant_lines(linetype = "solid") +
  geom_point()+
  ggtitle(label=expression(paste(bold(underline("Visualisation 1:")),bold("Nuage de points"))), 
          subtitle ="(Correlation entre la largeur et la longueur de Sépales des épices)")+
  labs(x="Pays", y="Genre dans l'ADM", caption = expression(paste(italic(underline("Source:")),italic(" Données issues de données classique 'IRIS' de R"))))+
  Conrad_Theme()

II-2-2 Le Graphique à barre et courbe

C’est Un bon moyen de montrer la relation dans le temps entre un montant (colonnes) et un taux (ligne)

Présentation des données

year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
perf <- data.frame(year, course, penroll)

head(perf)%>%
  kbl(caption = "Choix cours optionnel 2014-2020") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Choix cours optionnel 2014-2020
year course penroll
2014 35 0.30
2015 30 0.25
2016 40 0.30
2017 25 0.50
2018 30 0.40
2019 35 0.20

On en déduit le graphique à barres et courbe ci-dessous

ggp <- ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="#202020",colour="white")+
  geom_text(aes(label=penroll, x=year, y=course*1.2), colour="black")+
  geom_text(aes(label=course, x=year, y=2), colour="white")+
  geom_line(aes(x=year, y=100*penroll),stat="identity",color="#FFD100",size=2)+
  ggtitle(label=expression(paste(bold(underline("Visualisation 2:")),bold("Barre et Courbe"))), 
          subtitle ="(Proportion d'édudiants inscrits à un cours optionnel)")+
  labs(caption = expression(paste(italic(underline("Source:")),italic(" Données Fictives"))))+
  scale_y_continuous(sec.axis=sec_axis(
    ~.*0.01,name="% inscrits", labels=scales::percent))+
  labs(x="Année",y="Effectif Total")+
  Conrad_Theme()

  ggp

II-2-3 Le Graphique Nuage de points reliés par un ittinéraire

Il est habituellement utilisé pour montrer comment la relation entre 2 variables quatitatives a changé au fil du temps

Présentation des données

x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
labels <- 2013:2021
df <- data.frame(x, y, labels = labels)

head(df)%>%
  kbl(caption = "Evolution entre X et Y 2013-2021") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Evolution entre X et Y 2013-2021
x y labels
1 12 2013
2 16 2014
3 14 2015
4 18 2016
5 16 2017
4 13 2018

On en déduit le graphique à barres et courbe ci-dessous

ggplot(df, aes(x = x, y = y)) +
  geom_path(color = 4, arrow = arrow()) +
  geom_point(size = 2, color = 4) +
  geom_text(aes(label = labels, x = x + 0.7, y = y))+
  ggtitle(label=expression(paste(bold(underline("Visualisation 3:")),bold("Le Graphique Nuage de points reliés par un ittinéraire"))), 
          subtitle ="(Y connait une grande croissance à partir de 2019)")+
  labs(caption = expression(paste(italic(underline("Source:")),italic(" Données Fictives"))))+
  Conrad_Theme()

II-2-4 Le Graphique à bulles

Comme un nuage de points, il permet de voir les correlations entre 2 variables quantitatives mais, ajoute des détails supplémentaires en dimensionnant les cercles en fonction d’une troisième variable quantitative et en les coloriant en fonction de la quatrième variable (qualitative)

Présentation des données

library(gapminder) 
data <- gapminder %>% filter(year=="2007") %>% dplyr::select(-year)
head(data)%>%
  kbl(caption = "Gapminder 2007") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Gapminder 2007
country continent lifeExp pop gdpPercap
Afghanistan Asia 43.828 31889923 974.5803
Albania Europe 76.423 3600523 5937.0295
Algeria Africa 72.301 33333216 6223.3675
Angola Africa 42.731 12420476 4797.2313
Argentina Americas 75.320 40301927 12779.3796
Australia Oceania 81.235 20434176 34435.3674

On en déduit le graphique à bulles ci-dessous

data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, fill=continent)) +
    geom_point(alpha=0.5, shape=21, color="black") +
    Conrad_Theme() +
    theme(legend.position="bottom") +
    ylab("Expérance de Vie") +
    xlab("Revenu par Tête") +
    theme(legend.position = "left")+
  ggtitle(label=expression(paste(bold(underline("Visualisation 4:")),bold("Le Graphique à bulles"))), 
          subtitle ="(Le revenu est positivement lié à l'espérance de vie)")+
  labs(caption = expression(paste(italic(underline("Source:")),italic(" Données Fictives"))))

II-2-5 Le Graphique carte de chaleur

C’est un bon moyen de montrer les modèles entre 2 catégories de données, il est moins bon pour montrer les différences fines (de faible ampleur) dans les quantités. il est plus recommendé de l’utiliser entre 2 Variables qualitatives ou entre une qualitative et une quandtitative.

Présentation des données

set.seed(328576)
data2 <- data.frame(group1 = rep(LETTERS[1:4], each = 10),
                   group2 = letters[1:10],
                   values = round(rnorm(40), 2))
head(data2)%>%
  kbl(caption = "Maj_Minus") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Maj_Minus
group1 group2 values
A a -0.52
A b -0.06
A c -1.63
A d 1.22
A e -0.94
A f 0.65

On en déduit le graphique carte de chaleur ci-dessous

data2 %>%ggplot(aes(group1, group2)) +    # Create default ggplot2 heatmap
  geom_tile(aes(fill = values))+
  geom_text(aes(label = values))+
  geom_text(aes(label = values))+
  ggtitle(label=expression(paste(bold(underline("Visualisation 5:")),bold("Le Graphique Carte de chaleur"))), 
          subtitle ="(Relation entre les Majuscules et les Minuscules)")+
  labs(caption = expression(paste(italic(underline("Source:")),italic(" Données Fictives"))))

II-3 Les Proportions

Ici vous cherchez à montrez comment une seule entité peut être décomposée en ses éléments composants. Si l’intérêt du lecteur est uniquement dans la taille des composants, considérez plutôt un tableau de type magnitude

II-3-1 Le graphique parlement

Un hémicycle/parlement est souvent utilisé pour visualiser les résultats politiques. De manière beaucoup plus pratique, il peut servir à présenter des proportions.

les données utilisées sont les suivantes

library(ggparliament)
ru <- election_data %>%
  filter(country == "Russia" & year == 2016)
ru_semicircle <- parliament_data(election_data=ru,
                                 type = "semicircle",
                                 parl_rows = 10,
                                 party_seats = ru$seats)

head(ru_semicircle)%>%
  kbl(caption = "Parlement") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Parlement
year country house party_long party_short seats government colour x y row theta
1 2016 Russia Duma Communist CPRF 42 0 #D50000 -2.000000 0 10 3.141593
1.1 2016 Russia Duma Communist CPRF 42 0 #D50000 -1.888889 0 9 3.141593
1.2 2016 Russia Duma Communist CPRF 42 0 #D50000 -1.777778 0 8 3.141593
1.3 2016 Russia Duma Communist CPRF 42 0 #D50000 -1.666667 0 7 3.141593
1.4 2016 Russia Duma Communist CPRF 42 0 #D50000 -1.555556 0 6 3.141593
1.5 2016 Russia Duma Communist CPRF 42 0 #D50000 -1.444444 0 5 3.141593

On en déduit le graphique suivant

ru_semicircle <- parliament_data(election_data = ru,
                                 type = "semicircle",
                                 parl_rows = 10,
                                 party_seats = ru$seats)

ggplot(ru_semicircle, aes(x = x, y = y, colour = party_short)) +
  geom_parliament_seats() + 
  draw_partylabels(type = "semicircle",
                   party_names = party_long,
                   party_seats = seats,
                   party_colours = colour) + 
  draw_totalseats(n = 450, type = "semicircle") +
  Conrad_Theme() +
  labs(title = "Russia, 2016") +
  scale_colour_manual(values = ru_semicircle$colour, 
                      limits = ru_semicircle$party_short)

Groupes devoir 1

Group1 <-c("Sindi","Kevin")
Group2 <-c("Michèle","Junior")
Group3 <-c("Roger","Jean")
Group4 <-c("Guy-Martial","Georges")
Group5 <-c("Romaric","Kantin", "Christian")
Group6 <-c("Wilfried","Bonaventure")
Group7 <-c("Jovita","Ralf")
Group8 <-c("Epiphanie","Vidal")
library(kableExtra)
set.seed(1132023)
Group<-c(1, 2, 3, 4, 5, 6, 7, 8)
Chapitre <-data.frame(c("Correlation", "Ranking", "Distribution", "Change_Over_Time", 
  "Magnitude", "Part_Of_Whole", "Spatial", "Flow"))
names(Chapitre)<-c("Chapitre_CC")
Chapitre$Group<-print(sample(Group,8,replace=FALSE))
## [1] 8 4 7 1 5 6 3 2
Chapitre%>%
  kbl(caption = "Répartition des groupe CC") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Répartition des groupe CC
Chapitre_CC Group
Correlation 8
Ranking 4
Distribution 7
Change_Over_Time 1
Magnitude 5
Part_Of_Whole 6
Spatial 3
Flow 2
library(leaflet)
library(raster)
library(sf)
library(sp)
library(dplyr)
CMR1 <- getData('GADM', country='CMR', level=1)
is(CMR1)
## [1] "SpatialPolygonsDataFrame" "SpatialPolygons"         
## [3] "Spatial"                  "SpatialVector"
CMR1sf = st_as_sf(CMR1)
library(readr)
Population <- read_csv("D:/Population.csv")
Population2<-Population%>%mutate(NAME_1=case_when(
  Region=="Adamaoua" ~ "Adamaoua",
  Region=="Centre" ~ "Centre",
  Region=="Est" ~ "Est",
  Region=="Extr\xeame-Nord" ~ "Extrême-Nord", 
  Region=="Littoral" ~  "Littoral",
  Region=="Nord" ~ "Nord",
  Region=="Nord-Ouest"   ~  "Nord-Ouest", 
  Region=="Ouest"  ~  "Ouest", 
  Region=="Sud" ~ "Sud",
  Region=="Sud-Ouest" ~  "Sud-Ouest",
  Region=="Cameroun" ~ "CMR",
  TRUE ~ "Extrême-Nord"
))
CMR1sf2<-left_join(CMR1sf, Population2, by="NAME_1")

pal <- colorBin(
  palette = "viridis",
  domain = CMR1sf2$Population,
  reverse = TRUE,
  # Echelle avec des quantiles sinon Paris prend toute la place...
  bins = quantile(
    CMR1sf2$Population,
    probs = seq(0, 1, by = 0.2)))

map_regions <- leaflet() %>%
  addTiles() %>%
  # polygone des regions
  addPolygons(
    data = CMR1sf2, 
    label = ~NAME_1,
    popup = ~paste0("Pop : ", Population, " Individus"), 
    fill = TRUE,
    fillColor = ~pal(Population),
    fillOpacity = 0.8,
    highlightOptions = highlightOptions(color = "white", weight = 2))%>% 
  addLegend(
    title = "Population par Région",
    pal = pal, values = CMR1sf2$Population)
map_regions