Estoy usando networkD3 en R para mostrar mis datos (función sankeyNetwork). Me encontré con varios problemas que no parecen tener soluciones disponibles.
Problema 1: si los nombres de los nodos son similares, se usa el mismo color, aunque en total difieren, por ejemplo, si los nombres son 1. "uno dos tres", 2. "uno tres". Los nombres aquí se asignan a través de NodeID. Si se cambia el nombre de 1 a algo así como "Dos uno tres", el problema ya no existe. ¿Hay alguna manera de mostrar los nombres de esta manera y tener los colores asignados de la forma en que se supone que deben hacerlo?
Problema 2: No se muestran decimales en los valores de enlaces o nodos. Este problema es molesto cuando se quiere mostrar porcentajes con decimales. Si un valor está por debajo del 1 % (o tal vez del 0,5 %), solo muestra el 0 % y con todos los valores se redondea al siguiente número completo. ¿Hay alguna manera de mostrar decimales (2 o 3)? Una solución para esto sería aumentar los números multiplicándolos y reemplazando el separador decimal, pero para esto aún no he encontrado una solución completa. La respuesta aquí proporciona una solución para reemplazar el separador decimal en los enlaces. Sin embargo, los nodos aún se muestran como antes y se elimina el signo de la unidad.
Problema 3: agregar títulos a los "grupos" o pasos del nodo. Mis datos están diseñados de manera que hay tres pasos de tiempo con nodos idénticos (8 nodos en cada uno de los 3 pasos). ¿Cómo puedo agregar un título sobre cada uno de los pasos que brinde información personalizada sobre ese "grupo" de nodos? (Supongo que NodeGroup podría ser algo diferente a lo que me refiero, de ahí las comillas).
{networkD3} tiene una opción de formato codificada configurada dentro de su JavaScript. Puede restablecerlo para que sea lo que quiera usando la respuesta de ejemplo a la que se vinculó... configurando críticamente la opción de formato en el .format(",.2f") , donde en este caso el 2 significa imprimir dos dígitos después del decimal punto.
library(networkD3) library(htmlwidgets) nodes <- data.frame(name = c('a','b')) links <- data.frame(source = 0, target = 1, value = 0.34) p <- sankeyNetwork( Links = links, Source = "source", Target = "target", Value = "value", Nodes = nodes, NodeID = "name", fontSize = 12, nodeWidth = 30, iterations = 0 ) customJS <- ' function(el,x) { var link = d3.selectAll(".link"); var format = d3.formatLocale({"decimal": ",", "thousands": ".", "grouping": [3], "currency": ["", "\u00a0€"]}).format(",.2f"); link.select("title").select("body") .html(function(d) { return "<pre>" + d.source.name + " \u2192 " + d.target.name + "\\n" + format(d.value) + "<pre>"; }); } ' onRender(p, customJS)