es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible tener dos enlaces que fluyan desde un nodo en el diagrama de Sankey?

Quiero modificar el gráfico Sankey que hice usando el paquete R networkD3 para que múltiples enlaces fluyan desde un mismo nodo, esto es lo que he hecho hasta ahora:

Encabezado de muestra aleatoria de datos:

  Study       Category      Class
  <chr>       <chr>         <chr>
1 study17     cat H         class B;class C
2 study32     cat A;cat B   class A
3 study7      cat F         class A
4 study21     cat F         class C
5 study24     cat F         class B;class C
6 study15     cat E;cat K   class C 

Ejemplo de datos:

d <- read.csv(text = "Study,Category,Class
study17,cat H,class B;class C
study32,cat A;cat B,class A
study7,cat F,class A
study21,cat F,class C
study24,cat F,class B;class C
study15,cat E;cat K,class C")

Usando esta respuesta, creé el siguiente gráfico Sankey:

enter image description here

Sin embargo, como se puede ver, la segunda y tercera columnas ahora incluyen “nodos compuestos” como “cat A;cat B” y “class B; class C”.

Me gustaría crear dos nodos que fluyan desde el estudio 32: uno hacia la categoría A y otro hacia la categoría B. De manera similar, me gustaría que dos nodos fluyan desde la categoría F (fila 5): uno hacia la clase B y otro hacia la clase C.

En resumen, estoy preguntando si es posible hacer algo como dividir enlaces. Sé que podría dividirlos regularmente y crear una nueva fila para cada instancia, pero esto distorsionaría la verdad en esta imagen.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear múltiples enlaces que fluyan desde un nodo en un gráfico Sankey utilizando networkD3 en R, puede utilizar la función str_split del paquete stringr para dividir los nodos compuestos en nodos separados.

    Aquí hay un ejemplo de código para dividir la columna Categoría:

    “`{r}
    library(stringr)

    dividir la columna Categoría usando “;”

    d$Category_split <- str_split(d$Category, “;”)

    crear un marco de datos con una fila por cada categoría

    d2 <- data.frame(Study = rep(d$Study, sapply(d$Category_split, length)),
    Category = unlist(d$Category_split),
    Class = rep(d$Class, sapply(d$Category_split, length)))


    Esto creará un nuevo marco de datos `d2` con una fila por cada categoría, y la columna `Category` ya no incluirá nodos compuestos. Luego puede usar `d2` para crear el gráfico Sankey con múltiples enlaces que fluyen desde un nodo. ```{r} library(networkD3) # crear el gráfico Sankey sankeyNetwork(Links = d2, Source = "Study", Target = "Category", Value = "Class", NodeID = c(unique(d2$Study), unique(d2$Category)), fontSize = 12, nodeWidth = 30, iterations = 0)

    Esto debería crear un gráfico Sankey con nodos separados para cada categoría y múltiples enlaces que fluyen desde un nodo.

    Tenga en cuenta que también puede aplicar el mismo enfoque a la columna Class, si es necesario.

Comments are closed.