Un oggetto igraph può avere bordi diretti e non orientati?

Aug 20 2020

Sto cercando di usare igraph / ggraph per tracciare una rete, in cui alcuni dei bordi sono diretti e altri no.

Un piccolo esempio dal mio edgelist. Qui i bordi del sito della proteina sono ciò che voglio rappresentare come non orientati e il bordo della fosforilazione come diretto.

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")
)

Ho provato a suddividere i bordi non orientati e specificarli come tali, ma non ha funzionato:

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"] ))

Qualcuno ha altri suggerimenti? Come ho detto, in realtà voglio solo tracciare questo (usando ggraph).

Grazie!

Risposte

3 desval Aug 20 2020 at 13:51

Se desideri stampare con igraph, puoi importare l'elenco dei bordi come indicato e quindi utilizzare edge.arrow.mode.

nw <- graph_from_data_frame(df, directed = T)


plot(nw)

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

Non sono sicuro che ggraphsupporti qualcosa di simile. Ho pensato che fosse possibile modificare la dimensione delle frecce e impostarla su 0 per i bordi non orientati. Questo non funziona, poiché le frecce ereditano lo stile del resto del bordo.