о сбое тиражирования в тидиграфе - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть вопрос. Я использую igraph и tidygraph. В igraph информация об узле выглядит так:

1     A young
2     B young
3     C young
4     D adult
5     E adult
6     F   old
7     G   old
8     H   old
9     I   old
10    J   old

Однако, когда я использовал те же данные для тидиграфа, узел C помечается как взрослый, а не молодой ....... Что не так с моим кодом ?? Как правильно назначить узлы $ cara c?

#https://www.r-graph-gallery.com/249-igraph-network-map-a-color.html

# library
library(igraph)
set.seed(1)
# create data:
links <- data.frame(
  source=c("A","A", "A", "A", "A","J", "B", "B", "C", "C", "D","I"),
  target=c("B","B", "C", "D", "J","A","E", "F", "G", "H", "I","I"),
  weight=(sample(1:4, 12, replace=T))

)
nodes <- data.frame(
  name=LETTERS[1:10],
  carac=c( rep("young",3),rep("adult",2), rep("old",5))
)

# Turn it into igraph object
network <- graph_from_data_frame(d=links, vertices=nodes, directed=F) 

# Make a palette of 3 colors
library(RColorBrewer)
coul  <- brewer.pal(3, "Set1") 

# Create a vector of color
my_color <- coul[as.numeric(as.factor(V(network)$carac))]

# Make the plot
plot(network, vertex.color=my_color)



library(ggraph)
library(tidygraph)
#
g<-as_tbl_graph(links, directed = FALSE)

g %>%
  mutate(degree = centrality_degree(),
         community = as.factor(V(network)$carac) )%>%
  ggraph(layout = "lgl") +
  geom_edge_link(aes(width = 1),
                 alpha = 0.8,
                 colour = "lightgray") +
  scale_edge_width(range = c(0.1, 1)) +geom_node_point(aes(colour = community, size = degree)) +
  geom_node_text(aes(label = name), repel = TRUE) +
  theme_graph()

1 Ответ

1 голос
/ 15 февраля 2020

Кажется, проблема в этой части

g <- as_tbl_graph(links, directed = FALSE)
g %>%
  mutate(degree = centrality_degree(),
         community = as.factor(V(network)$carac) )

Вы, похоже, предполагаете, что порядок узлов в tbl_graph объекте такой же, как V(network), и это не похоже быть так. Было бы лучше просто создать свой собственный tbl_graph и указать одновременно узлы и ребра. Например,

g <- tbl_graph(nodes, links, directed=FALSE)
g %>%
   mutate(degree = centrality_degree(),
          community = carac)

Тогда вам не нужно беспокоиться о том, чтобы потом их снова найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...