首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于tidygraph中复制失败的问题

关于tidygraph中复制失败的问题
EN

Stack Overflow用户
提问于 2020-02-15 05:04:56
回答 1查看 35关注 0票数 0

我有个问题。我正在使用igraph和tidygraph。在图中,节点的信息是这样的,

代码语言:javascript
复制
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

然而,当我对tidygraph使用相同的数据时,节点C被标记为成人,而不是年轻的......我的代码有什么问题??如何适当地分配节点$carac?

代码语言:javascript
复制
#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()
EN

回答 1

Stack Overflow用户

发布于 2020-02-15 05:19:57

问题似乎出在这一部分

代码语言:javascript
复制
g <- as_tbl_graph(links, directed = FALSE)
g %>%
  mutate(degree = centrality_degree(),
         community = as.factor(V(network)$carac) )

您似乎假设tbl_graph对象中节点的顺序与V(network)的顺序相同,但事实似乎并非如此。最好只创建自己的tbl_graph,同时指定节点和边。例如

代码语言:javascript
复制
g <- tbl_graph(nodes, links, directed=FALSE)
g %>%
   mutate(degree = centrality_degree(),
          community = carac)

然后,您不必担心稍后如何将它们匹配起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60233515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档