Может ли объект igraph иметь направленные и неориентированные края?

Aug 20 2020

Я пытаюсь использовать igraph / ggraph для построения сети, в которой одни ребра направлены, а другие нет.

Небольшой пример из моего списка публикаций. Здесь края белковых сайтов - это то, что я хочу представить как ненаправленные, а край фосфорилирования - как направленные.

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

Я попытался выделить неориентированные ребра и указать их как таковые, но это не сработало:

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

У кого-нибудь есть другие предложения? Как я уже сказал, на самом деле я просто хочу это построить (используя ggraph).

Благодаря!

Ответы

3 desval Aug 20 2020 at 13:51

Если вы хотите рисовать вместе, igraphвы можете импортировать список ребер, как указано, а затем использовать edge.arrow.mode.

nw <- graph_from_data_frame(df, directed = T)


plot(nw)

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

Я не уверен, что ggraphподдерживает что-либо подобное. Я подумал, что можно изменить размер стрелок и установить его на 0 для ненаправленных краев. Это не работает, поскольку стрелки наследуют стиль остальной кромки.