ggplot()+
geom_point(aes(Petal.Width, Sepal.Width), iris)+
theme_bw()+
theme(panel.margin=grid::unit(0, "lines"))+
facet_grid(. ~ Species)Annexe A — Techniques de programmation pour la visualisation
Cette annexe décrit plusieurs techniques de programmation R utiles dans la création des animints.
A.1 Facettes économes en espace
Pour mettre l’accent sur les données graphiques dans les ggplots à facettes, éliminez l’espace entre les facettes à l’aide du code suivant :
Ce code comprend trois parties :
-
panel.margin=0élimine l’espace entre les panneaux. -
theme_bwactive un thème noir et blanc (bordures de panneaux noires et arrière-plans de panneaux blancs), ce qui rend visibles les limites entre les panneaux, une étape nécessaire, puisque la fonction par défaut de ggplottheme_greyutilise des fonds de panneaux gris et pas de bordures de panneaux.
-
facet_*crée un ggplot multipanneaux.
Notez que nous utilisons l’unité de grille lines, qui correspond à la hauteur d’une ligne de texte de la taille par défaut. C’est la seule unité de grille qu’animint sait traduire. L’utilisation d’autres unités telles que cm n’est pas recommandée.
A.2 Liste de tableaux de données
Les tableaux de données sont très utiles pour créer des visualisations de données interactives, quelle que soit leur complexité. Leur structure générale est la suivante :
library(data.table)
outer.data.list <- list()
inner.data.list <- list()
for(outer in outer.vec){
outer.dt <- computeOuter(outer)
outer.data.list[[paste(outer)]] <- data.table(outer, outer.dt)
for(inner in inner.vec){
inner.dt <- computeInner(outer.dt, inner)
inner.data.list[[paste(outer, inner)]] <-
data.table(outer, inner, inner.dt)
}
}
outer.data <- do.call(rbind, outer.data.list)
inner.data <- do.call(rbind, inner.data.list)Quelques commentaires :
- La première partie consiste à initialiser des listes vides. Il y en a deux ci-dessus,
outer.data.listetinner.data.list, mais on peut en initialiser autant que nécessaire . - La deuxième partie est un ensemble de boucles for imbriquées qui assignent des tableaux de données aux éléments de ces listes.
- Des fonctions comme
computeOuteretcomputeInnerpeuvent être utilisées, mais il est également possible d’effectuer simplement les calculs directement dans la boucle for. - Pour optimiser la rapidité de votre code, utilisez les opérations matrice-vecteur ou vecteur-scalaire dans la boucle for la plus interne. Si vous n’effectuez que des opérations scalaires-scalaires dans votre boucle for interne, vous améliorerez les performances de votre code en supprimant cette boucle for et en réécrivant le calcul en termes d’opérations vectorielles-scalaires.
-
paste()est utilisée pour nommer ledata.tabledans la liste de résultats. Bien qu’on puisse utiliserdata.frameoudata.table, en pratiquedata.tableest souvent bien plus rapide lors de l’étape finale de combinaison. - La dernière partie utilise
do.callavecrbindpour combiner les tableaux de données stockés au cours des boucles for.
A.3 Rajouter une colonne et des facettes
Cette technique est utile pour créer des ggplots multipanneaux avec des axes alignés. Tout d’abord, définissez une fonction dont les arguments sont un tableau de données et une ou plusieurs valeurs qui serviront à ajouter des facteurs à ce tableau.
addColumn <- function(df, time.period)data.frame(
df, time.period=factor(time.period, c("1975", "1960-2010")))
animint(
ggplot()+
geom_point(aes(
x=life.expectancy, y=fertility.rate, color=region),
data=addColumn(WorldBank1975, "1975"))+
geom_path(aes(
x=life.expectancy, y=fertility.rate, color=region,
group=country),
data=addColumn(WorldBankBefore1975, "1975"))+
geom_line(aes(
x=year, y=fertility.rate, color=region, group=country),
data=addColumn(WorldBank, "1960-2010"))+
facet_grid(. ~ time.period, scales="free")+
xlab(""))Notez que scales="free" et xlab("") sont utilisés, car les axes x ont maintenant des unités très différentes (année et espérance de vie).
A.4 Légendes de couleurs manuelles
On peut utiliser scale_color_manual() et scale_fill_manual() pour préciser les couleurs dans les légendes pour aes(color) et aes(fill). En règle générale, on choisit l’une des palettes ColorBrewer :
RColorBrewer::display.brewer.all()
Par exemple, pour obtenir le code R de la palette Set1, nous écrivons :
dput(RColorBrewer::brewer.pal(7, "Set1"))c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33",
"#A65628")
Nous copions ensuite ce code R depuis le terminal et le collons dans l’éditeur de texte.
East Asia & Pacific (all income levels)
"#E41A1C"
Europe & Central Asia (all income levels)
"#377EB8"
Latin America & Caribbean (all income levels)
"#4DAF4A"
Middle East & North Africa (all income levels)
"#984EA3"
North America
"#FF7F00"
South Asia
"#FFFF33"
Sub-Saharan Africa (all income levels)
"#A65628"
Nous pouvons ensuite l’utiliser avec scale_color_manual().
library(animint2)
ggplot()+
scale_color_manual(values=region.colors)+
geom_point(aes(
x=life.expectancy, y=fertility.rate, color=region),
data=WorldBank)Warning: Removed 1490 rows containing missing values (geom_point).
