Visualisation et Webmapping
Etienne Côme, @comeetie @mapstodon.space , ENTPE
8 Avril 2025
@comeetie
Chercheur Université Gustave Eiffel COSYS/GRETTIA Statistiques, Données, Visualisation, Cartographie, Transports,… R,JS,Python,Cpp,…
Trajectoire
Toujours aimé les cartes !
Trajectoire
Toujours aimé les cartes !
en voyage
Trajectoire
Toujours aimé les cartes !
ou dans les livres
Trajectoire
Pas de formation en carto/visualisation
Plus à l’aise avec un
qu’avec un .
Trajectoire
rencontre avec la Grammaire Graphique
et avec ggplot
Trajectoire
découverte des possibilités offertes
par le js et d3
Trajectoire
découverte de la stack logicielle autour d’OSM
et des travaux de Stamen
Trajectoire
découverte de la stack logicielle autour d’OSM
donc de Mapbox
Trajectoire
découverte de la stack logicielle autour d’OSM
et de Leaflet
Trajectoire
découverte de la stack logicielle autour d’OSM
Il faut être 2
pour faire une carte/visualisation
Carte / Visualisation ?
Bruit divers !
Bruit sémantique
Bruit technique
Bruit sémantique
Source (Données)
Emetteur (Encodage)
Canal
Récepteur (Décodage)
Toutes les cartes/visualisations sont
fausses
mais certaines sont
utiles
mais certaines sont
utiles
mais certaines sont
utiles
Visualisation ?
“Transformation of the symbolic into the geometric” [McCormick et al. 1987]
“… finding the artificial memory that best supports our natural means of perception.” [Bertin 1967]
“The use of computer-generated, interactive, visual representations of data to amplify cognition.” [Card, Mackinlay, & Shneiderman 1999]
Pourquoi visualiser ?
Intégrer l’humain dans la boucle
Répondre a des questions ou trouver des questions ?
Prendre des décisions
Remettre les données dans leur contexte
Amplifier la mémoire
Calcul graphique
Trouver des schémas, des patterns
Présenter des arguments
Inspirer
Pourquoi visualiser ?
Analyser :
Développer et critiquer des hypothèses
Découvrir des erreurs
Trouver des patterns
Communiquer
Partager et convaincre
Collaborer et réviser
Anscombe quartet
1
9
7.500909
3.316625
2.031568
2
9
7.500909
3.316625
2.031657
3
9
7.500000
3.316625
2.030424
4
9
7.500909
3.316625
2.030578
Anscombe quartet
Cholera map (John Snow)
Visualiser
=
encoder dans des
variables graphiques
les données
Variables graphiques
Bertin Jacques, Sémiologie graphique, Paris, Mouton/Gauthier-Villars, 1967.
Variables graphiques
Bertin Jacques, Sémiologie graphique, Paris, Mouton/Gauthier-Villars, 1967.
Marques // variables graphiques
Marques :
Eléments de base du graphiques
Variables graphique (chanels) :
Ce qui va varier en fonctions des données
Variables graphiques
Variables graphiques
Toutes les variables graphiques ne se valent pas.
Variables graphiques
Choisir une variable graphique adapté aux type de la variable représenté
Variables graphiques
Ce qui est intéressant n’est pas toujours ce que l’on a au départ.
pré-attentive processing
Combien de 3 ?
1281768756138976546984506985604982826762 9809858458224509856458945098450980943585 9091030209905959595772564675050678904567 8845789809821677654876364908560912949686
pré-attentive processing
Combien de 3 ?
128176875613 8976546984506985604982826762 9809858458224509856458945098450980943 585 909103 0209905959595772564675050678904567 88457898098216776548763 64908560912949686
pré-attentive processing
pré-attentive processing
pré-attentive processing
library (ggplot2)
ggplot (mpg)+ geom_point (aes (x= cty,y= hwy,color= class))+ theme_bw ()
Libraries basées sur la grammaire graphique
ggplot (r)
plot (js)
vgplot (js)
plotnine (python)
library (ggplot2)
ggplot (mpg)+ geom_point (aes (x= cty,y= hwy,color= class))
Questions ? variables continues ? discrètes ? ordonnées ? temporelles ?spatiales ?
Des catégories
et
une quantité pour chaque catégorie
le bar chart
m_cty = mpg %>% group_by (manufacturer) %>% summarize (mcty= mean (cty))
ggplot (data= m_cty)+
geom_bar (aes (x= manufacturer,y= mcty),stat = 'identity' )+
scale_x_discrete ("Manufacturer" )+
scale_y_continuous ("Miles / Gallon (City conditions)" )+ theme_bw ()
Ordre ?
m_cty_ordered = m_cty %>% arrange (desc (mcty)) %>%
mutate (manufacturer= factor (manufacturer,levels= manufacturer))
ggplot (data= m_cty_ordered)+
geom_bar (aes (x= manufacturer,y= mcty),stat = 'identity' )+
scale_x_discrete ("Manufacturer" )+
scale_y_continuous ("Miles / Gallon (City conditions)" )+ theme_bw ()
Horizontal ?
ggplot (data= m_cty_ordered)+
geom_bar (aes (x= manufacturer,y= mcty),stat = 'identity' )+
scale_x_discrete ("Manufacturer" )+
scale_y_continuous ("Miles / Gallon (City conditions)" )+
coord_flip ()+ theme_bw ()
Ordre naturel imposé par le temps
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes))+ geom_point ()+ theme_bw ()
Ordre naturel imposé par le temps
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes))+ geom_line ()+ theme_bw ()
Aspect ratio
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes))+ geom_line ()+ theme_bw ()
Aspect ratio
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes))+ geom_line ()+ theme_bw ()
Aspect ratio
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes))+ geom_line ()+ theme_bw ()
Aspect ratio, 45°
Heuristic: use the aspect ratio that results in an average line slope of 45°.
Cleveland, William S., Marylyn E. McGill, and Robert McGill. “The shape parameter of a two-variable graph.” Journal of the American Statistical Association 83.402 (1988): 289-300.
Aire + Echelle
ggplot (data= st_tempstats_all.df,aes (x= time,y= nbbikes),fill= "#777777" )+ geom_area ()+ theme_bw ()
Changement de point de vue
ggplot (data= st_tempstats_all.df,aes (x= time,y= max (nbbikes)- nbbikes),fill= "#777777" )+
geom_area ()+ theme_bw ()
Line charts superposés
ggplot (data= st_tempstats_sub.df)+
geom_line (aes (x= time,y= nbbikes,group= id,color= factor (id)),linewidth= 0.8 )+ theme_bw ()
Small multiples
ggplot (data= st_tempstats_sub.df)+
geom_line (aes (x= time,y= nbbikes,group= id,color= factor (id)),linewidth= 0.8 )+
facet_grid (id ~ .)+ theme_bw ()
2 variables numériques
+ catégories
Scatter plot + colors
mpg_su = mpg %>%
filter (class %in% c ('compact' ,'suv' ,'pickup' ,'minivan' ))
ggplot (mpg_su)+ geom_point (aes (x= cty,y= hwy,color= class))+ theme_bw ()
Scatter plot + symbols
mpg_su = mpg %>%
filter (class %in% c ('compact' ,'suv' ,'pickup' ,'minivan' ))
ggplot (mpg_su)+ geom_point (aes (x= cty,y= hwy,shape= class))+ theme_bw ()
3 variables numériques (dont une >0)
+ catégories
Scatter plot + couleur + taille
ggplot (mpg_su)+ geom_point (aes (x= cty,y= hwy,color= class,size= displ))+ theme_bw ()
! Echelles !
Taille : f(data) -> nb pixels
Couleurs : f(data) -> rgb
Taille des cercles
Rayon
Aire
Echelles de couleurs
palette + discrétisation + interpolation
https://colorbrewer2.org
Eviter de faire des gradients en RGB.
Tufte
Data-ink ratio
Lying factor
Data-ink ratio
Lie Factor
\[\textrm{Lie factor} = \frac{\textrm{visual effect size}}{\textrm{data effect size}}\]
Lie factor :
\[\textrm{data effect size} = \frac{27.5 - 18}{18} \times 100 = 53 \%\]
Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)
Lie factor :
\[\textrm{visual effect size} = \frac{5.3 -0.6}{0.6} \times 100 = 783 \%\]
Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)
Lie factor :
\[\textrm{Lie factor} = \frac{783}{53} = 14.8\]
Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)
Lie factor : 9.4
Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)
Sachant que l’aire de la tranche “apple”” (en vert) est proportionelle à \(2.22\,cm^2\) et celle correspondant à rim (en bleue) est proportionelle à \(2.96\,cm^2\) calculer le lying factor ?
L’importance des détails
Un nombre infini de degrés de libertés
Sortir des sentiers batus
pour stimuler l’intérêt du lecteur
Sortir des sentiers batus
pour stimuler l’intérêt du lecteur
Overview first
Zoom and filter
Then details-on-demand
Zoom \(\Rightarrow\) Profondeur
Les détails ont leurs importances !
Faciliter l’interaction n’est pas aisé
Médiation
Algorithmique
Matrices OD \(\Rightarrow\) Champs vectoriels
Médiation
Algorithmique
Parties de cartes compétitives\(\Rightarrow\) Espace abstrait organisé
Médiation
Algorithmique
Relations d’abonnements\(\Rightarrow\) Espace abstrait organisé
Outils
Merci !
Questions / Discussion