library(tidyverse)
library(janitor)
library(skimr)
<- "9 juin 2020"
date_caption source("tools/themes.R") # themes
# Idea : https://jrnold.github.io/priestley/articles/priestley.html
<- read_csv2("posts/2025-01-20/data/antibes-maires-depuis1681.csv")
source <- source df
Introduction
Visualisation des données publiées sur data.gouv.fr par la ville d’Antibes Juan-Les-Pins “Maires d’Antibes depuis 1681 jusqu’aux élections de mars 2020 incluses.”
Résultats
Après Jean Baptiste-ROSTAN (1831-1865), le maire d’Antibes avec la plus grande longévité est Jean LEONETTI (1995-2026).
Visualisation
Code
Import
Inspect
head(df)
tail(df)
glimpse(df)
skim(df)
summary(df)
str(df)
names(df)
colnames(df)
unique(df$MAIRE_NOM)
:::tabyl(df$MAIRE_NOM) %>% arrange(-percent) janitor
Clean
<-
df %>%
df select(3:9) %>%
select(-6) %>%
mutate_if(is.character, as.factor) %>%
mutate(duree = df$FIN_MANDAT-df$DEBUT_MANDAT_ANNEE) %>%
ungroup() %>%
arrange(MAIRE_NOM) %>%
arrange(DEBUT_MANDAT_ANNEE) %>%
group_by(MAIRE_NOM, MAIRE_PRENOM) %>%
mutate(id = cur_group_id()) %>% # group ids
mutate(dureetot = cumsum(duree)) %>%
mutate(dureetotmax = max(dureetot)) %>%
unite(idnom, c(MAIRE_PRENOM,MAIRE_NOM,id), remove = FALSE)
<-
df %>%
df mutate(CONTEXTE_HISTORIQUE = str_to_title(CONTEXTE_HISTORIQUE))
#make col with unique names
<- df %>%
df mutate(labelname = paste0(`MAIRE_PRENOM`, " ", `MAIRE_NOM`)) %>%
group_by(labelname) %>%
mutate(labelname = ifelse(row_number() == 1, labelname, NA_character_)) %>%
ungroup()
#check labelname are unique
print(df[c("idnom", "labelname")])
glimpse(df)
Rows: 110
Columns: 12
$ idnom <chr> "Honoré_BERNARDY_8", "Antoine_REGNARD_49", "Honoré…
$ MAIRE_PRENOM <fct> Honoré, Antoine, Honoré, non communiqué, Honoré, J…
$ MAIRE_NOM <fct> BERNARDY, REGNARD, LEON, GUIRAUD, CARENCE, ARAZY, …
$ DEBUT_MANDAT_ANNEE <dbl> 1681, 1701, 1702, 1704, 1705, 1706, 1711, 1712, 17…
$ FIN_MANDAT <dbl> 1681, 1701, 1702, 1704, 1705, 1706, 1711, 1712, 17…
$ PROFESSION_MAIRE <fct> "Avocat à la cour d'Aix", "Maître-apothicaire", "B…
$ CONTEXTE_HISTORIQUE <chr> "Grand Siecle", "Grand Siecle", "Grand Siecle", "G…
$ duree <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
$ id <int> 8, 49, 36, 30, 12, 1, 36, 18, 16, 51, 17, 62, 6, 3…
$ dureetot <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
$ dureetotmax <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
$ labelname <chr> "Honoré BERNARDY", "Antoine REGNARD", "Honoré LEON…
Analyze
#create CONTEXTE HISTORIQUE BOXES
<-
df %>%
df group_by(CONTEXTE_HISTORIQUE) %>%
mutate(CONTEXTEmin = min(DEBUT_MANDAT_ANNEE),
CONTEXTEmax = max(FIN_MANDAT)) %>%
ungroup()
#create CONTEXTE HISTORIQUE bins
<-
df%>%
df mutate(phase = cut(DEBUT_MANDAT_ANNEE,
breaks = c(1680,1800,1900,2020,2026),
labels = c("XVII-XVIIIeme", "XIXeme", "XXeme", "XXIeme"))) %>%
filter(DEBUT_MANDAT_ANNEE > 1808)
Plot
<-
timeline %>%
df mutate(phase = fct_rev(phase)) %>% # Reverse the order of facets
ggplot(aes(
x = DEBUT_MANDAT_ANNEE,
y = reorder(idnom, DEBUT_MANDAT_ANNEE),
+
)) geom_segment(aes(xend = FIN_MANDAT,
yend = idnom,
color = reorder(CONTEXTE_HISTORIQUE, FIN_MANDAT)
), linewidth = 6, lineend = "round"
+
) geom_text(
aes(label = labelname),
size = 4.5,
hjust = 0.05,
nudge_y = 0.4,
family = setfont,
color = "gray20"
+
) geom_text(data = df %>%
filter(df$dureetotmax >= 9) %>%
group_by(idnom) %>%
summarise(dureetotmax = max(dureetotmax),
DEBUT_MANDAT_ANNEE = min(DEBUT_MANDAT_ANNEE)),
aes(
x = DEBUT_MANDAT_ANNEE,
y = reorder(idnom, DEBUT_MANDAT_ANNEE),
label = paste0(dureetotmax, " ans")
),size = 4,
hjust = 0.1,
vjust = 2.1,
nudge_y = 0.4,
family = setfont,
color = "white",
fontface = "bold"
+
) annotate(
"label",
x = -Inf, # Position at the far left of the plot
y = Inf, # Position at the top of the plot
label = "
Jean LEONETTI est maire d'Antibes depuis 1995,
et totalisera 31 années de mandats d'ici 2026.
Il est aussi député des Alpes-Maritimes et
président de la communauté d'agglomération
de Sophia Antipolis depuis 2002.
L'élu détient le record de longévité après
Jean-Baptiste ROSTAN, qui a servi 34 ans
entre 1831 et 1865.",
hjust = 0,
vjust = 1,
family = setfont,
fontface = "bold",
size = 4.5,
color = "gray30",
fill = "#FAE5C6",
label.size = 0 # Removes the border around the label
+
) annotate(
"curve",
x = 1928,
xend = 1990,
y = max(as.numeric(factor(df$idnom)))-0.5,
yend = max(as.numeric(factor(df$idnom))+0.1),
curvature = -0.2,
arrow = arrow(length = unit(0.02, "npc"), type = "open"),
colour = "gray30",
size = 1.2
+
) labs(title = "Jean Leonetti : record de longévité à la mairie d'Antibes",
subtitle = "Mandats des maires d'Antibes du XIXème siècle à nos jours",
caption = social_caption2,
color ="Contexte historique") +
scale_color_manual(values = custom_palette) +
scale_fill_manual(values = custom_palette) +
+
tt.maires guides(color = guide_legend(reverse = TRUE)) +
scale_x_continuous(
limits = c(min(df$DEBUT_MANDAT_ANNEE)-1, max(df$FIN_MANDAT) + 1), # Add space
expand = expansion(mult = 0.1) # Add 10% space on both sides
)
Render
Source
Maires de la Ville d’Antibes, disponible sur data.gouv.fr. Mise à jour du 9 juin 2020