Estoy trabajando con una red grande (1k + nodos, 1M+ conexiones) y me gustaría establecer un zoom inicial personalizado, ya que el zoom estándar solo enfoca unos pocos nodos y toma mucho tiempo para lograr la proporción deseada (donde puedo ver toda la red).
Aquí está mi código:
library(networkD3) p <- forceNetwork(Links = links, Nodes = nodes, Source = 'source', Target = 'target', NodeID = 'name', Group = 'group', Value = "value", Nodesize = "size", radiusCalculation = JS("d.nodesize"), zoom = TRUE, arrows = FALSE, linkWidth = JS("function(d){return d.value;}"), linkDistance = JS("function(d){return d.value*10}"), charge = gravity, opacity = 0.95, fontSize = 24, linkColour = "#424242" ) customJS <- "function() { d3.selectAll('.node text').style('fill', 'white').attr('stroke-width', '.1px').attr('stroke', '#3f3f3f'); d3.select('body').style('background-color', '#15171a'); simulation = this; simulation.stop(); for (var i = 0; i < 300; ++i) simulation.tick(); simulation.nodes().forEach( function(d,i) { d.cx = dx; d.cy = dy; }); simulation.restart(); }" g <- htmlwidgets::onRender(p, customJS) gAquí hay un ejemplo minimizado y reproducible de establecer un valor de escala en el renderizado...
library(networkD3) p <- forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source", Target = "target", Value = "value", NodeID = "name", Group = "group", opacity = 0.4, zoom = TRUE) customJS <- 'function(el) { d3.select(el).select(".zoom-layer").attr("transform", "scale(0.3)") }' htmlwidgets::onRender(p, customJS)