Romance languages

D3 est une extension JavaScript très utile pour manipuler des données d’une façon interactive (réactive), spécialement des structures non linéaires. Naturellement, on peut utiliser D3 pour visualiser la géométrie de traits, la hiérarchie prosodique, etc. Avec R, on importe l’extension networkD3 pour générer ce type de structure. Dans l’exemple ci-dessous, on voit comment D3 peut nous aider à représenter les relations généalogiques entre les langues romanes.


Un exemple


Données

Pour générer le réseau ci-dessus, j’utilise deux data frames : nodes et links. Dans le premier, name représente l’étiquette de chaque nœud ; group sera utilisé pour définir les différentes couleurs du réseau ; et size sera utilisé pour ajuster la taille de chaque nœud. Dans notre data frame, links établit simplement les origines et les cibles de chaque lien dans le réseau. La variable value sera utilisée plus tard pour définir la largeur de chaque lien.

Code

head(nodes); nrow(nodes)
#>                  name group  size
#> 1               LATIN     1 250.0
#> 2     Classical Latin     1 100.0
#> 3        Vulgar Latin     1  80.0
#> 4 Continental Romance     2  25.0
#> 5  Sardinian Language     2   0.1
#> 6     Eastern Romance     2  15.0
#> [1] 24

head(links); nrow(links)
#>   source target value
#> 1      0      1     5
#> 2      1      2     4
#> 3      2      3     3
#> 4      2      4     1
#> 5      3      5     2
#> 6      3      5     1
#> [1] 24

Code

Code
forceNetwork(Links = links, 
             Nodes = nodes,
             Source = "source", 
             Value = "value",
             Target = "target",
             NodeID = "name",
             Nodesize = "size",
             Group = "group", 
             opacity = 1,
             linkColour = "black",
             linkDistance = JS("function(d) { return d.value * 20; }"),
             colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20);"),
             charge = -150,
             fontSize = 15,
             legend = F,
             linkWidth = JS("function(d) { return d.value*0.7; }"),
             radiusCalculation = JS("Math.sqrt(d.nodesize)+10"),
             opacityNoHover = 0.5,
             zoom = FALSE)

Copyright © 2024 Guilherme Duarte Garcia