¿Puede un objeto igraph tener bordes dirigidos y no dirigidos?

Aug 20 2020

Estoy tratando de usar igraph / ggraph para trazar una red, en la que algunos de los bordes están dirigidos y otros no.

Un pequeño ejemplo de mi edgelist. Aquí los bordes del sitio de la proteína son lo que quiero representar como no dirigido y el borde de fosforilación como dirigido.

df <- data.frame(
  stringsAsFactors = FALSE,
              from = c("RPS6KA3", "RPS6KA3", "RPS6KA3", "RPS6KA3", "RPS6KA3"),
                to = c("RPS6KA3_Y529-p",
                       "RPS6KA3_S227-p","RPS6KA3_S369-p","RPS6KA3_T577-p","ATF4"),
            action = c("protein-site","protein-site",
                       "protein-site","protein-site","phosphorylation")
)

Intenté crear subconjuntos de los bordes no dirigidos y especificarlos como tales, pero no funcionó:

library(igraph)
nw <- graph_from_data_frame(df)

E(nw)[E(nw)$action == "protein-site"] <- as.undirected(subgraph.edges(nw, E(nw)[E(nw)$action == "protein-site"] ))

¿Alguien tiene alguna otra sugerencia? Como digo, en realidad solo quiero trazar esto (usando ggraph).

¡Gracias!

Respuestas

3 desval Aug 20 2020 at 13:51

Si está dispuesto a trazar con igraph, puede importar la lista de bordes como se indica y luego usar edge.arrow.mode.

nw <- graph_from_data_frame(df, directed = T)


plot(nw)

plot(nw,
     edge.arrow.mode = ifelse(E(nw)$action=="protein-site", "-", ">"))

No estoy seguro de que sea ggraphcompatible con algo similar. Pensé que sería posible cambiar el tamaño de las flechas y establecerlo en 0 para los bordes no dirigidos. Esto no funciona, ya que las flechas heredan el estilo del resto del borde.