Un objet igraph peut-il avoir des arêtes dirigées et non dirigées?
J'essaie d'utiliser igraph / ggraph pour tracer un réseau, dans lequel certaines des arêtes sont dirigées et d'autres pas.
Un petit exemple de ma edgelist. Ici, les bords du site protéique sont ce que je veux représenter comme non orienté et le bord de phosphorylation comme indiqué.
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")
)
J'ai essayé de sous-définir les bords non dirigés et de les spécifier comme tels, mais cela n'a pas fonctionné:
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"] ))
Quelqu'un at-il d'autres suggestions? Comme je l'ai dit, je ne veux vraiment que tracer cela (en utilisant ggraph).
Merci!
Réponses
Si vous souhaitez tracer avec, igraph
vous pouvez importer la liste des arêtes comme indiqué, puis l'utiliser edge.arrow.mode
.
nw <- graph_from_data_frame(df, directed = T)
plot(nw)

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

Je ne suis pas sûr de ggraph
soutenir quoi que ce soit de similaire. J'ai pensé qu'il serait possible de changer la taille des flèches et de la définir sur 0 pour les bords non dirigés. Cela ne fonctionne pas, car les flèches héritent du style du reste du bord.