使用igraph和vertex.pie的多色节点

使用igraph和vertex.pie的多色节点,r,pie-chart,igraph,graph-coloring,R,Pie Chart,Igraph,Graph Coloring,我想创建多色节点。我想留在igraph。我已经找到了vertex.shape.pie选项 以下是一些示例数据: test_fun <- function(color1,color2,len){ vec <- replicate(len,sample(c(color1,color2,NA),1)) return(vec) } set.seed(50) num_nodes<- 20 test_graph <- erdos.renyi.game(num_nodes,

我想创建多色节点。我想留在
igraph
。我已经找到了
vertex.shape.pie
选项

以下是一些示例数据:

test_fun <- function(color1,color2,len){
  vec <- replicate(len,sample(c(color1,color2,NA),1))
  return(vec)
}

set.seed(50)
num_nodes<- 20
test_graph <- erdos.renyi.game(num_nodes, 1/6)
V(test_graph)$color_1 <- test_fun("darkgreen","blue",num_nodes)
V(test_graph)$color_2 <- test_fun("brown","blueviolet",num_nodes)
V(test_graph)$color_3 <- test_fun("red","green",num_nodes)
V(test_graph)$color_4 <- test_fun("red","green",num_nodes)
plot(test_graph, vertex.size=7)


>test_graph
IGRAPH U--- 20 28 -- Erdos renyi (gnp) graph
+ attr: name (g/c), type (g/c), loops (g/l), p (g/n), color_1 (v/c), color_2 (v/c), color_3 (v/c), color_4 (v/c)
但我无法将此应用到我的示例中

编辑
将种子更改为50。饼图需要每个颜色在饼图中具有的值/比例列表。 您需要将
颜色*
变量转换为该颜色

为此,您可以首先将它们绑定在一起:

v<-cbind(V(test_graph)$color_1,V(test_graph)$color_2,V(test_graph)$color_3,V(test_graph)$color_4)
我将
set.seed
更改为50,因为有42个顶点只能得到
NAs
,因此无法绘制它们

总代码为:

library(igraph)

test_fun <- function(color1,color2,len){
  vec <- replicate(len,sample(c(color1,color2,NA),1))
  return(vec)
}

set.seed(50)
num_nodes<- 20
test_graph <- erdos.renyi.game(num_nodes, 1/6)
V(test_graph)$color_1 <- test_fun("darkgreen","blue",num_nodes)
V(test_graph)$color_2 <- test_fun("brown","blueviolet",num_nodes)
V(test_graph)$color_3 <- test_fun("red","green",num_nodes)
V(test_graph)$color_4 <- test_fun("red","green",num_nodes)

colors<-c("darkgreen","blue","blueviolet","brown","red","green")

v<-cbind(V(test_graph)$color_1,V(test_graph)$color_2,V(test_graph)$color_3,V(test_graph)$color_4)
values<-apply(v,1,function(x){
  sapply(colors,function(y){ifelse(y %in% x,1,0)})
})
values<-as.list(as.data.frame(values)) 

plot(test_graph, vertex.shape="pie", vertex.pie=values,
     vertex.pie.color=list(colors),
     vertex.size=seq(10,30,length=10))
库(igraph)
测试乐趣
colors<-c("darkgreen","blue","blueviolet","brown","red","green")
values<-apply(v,1,function(x){
  sapply(colors,function(y){ifelse(y %in% x,1,0)})
})
values<-as.list(as.data.frame(values)) 
plot(test_graph, vertex.shape="pie", vertex.pie=values,
    vertex.pie.color=list(colors),
    vertex.size=seq(10,30,length=10))
library(igraph)

test_fun <- function(color1,color2,len){
  vec <- replicate(len,sample(c(color1,color2,NA),1))
  return(vec)
}

set.seed(50)
num_nodes<- 20
test_graph <- erdos.renyi.game(num_nodes, 1/6)
V(test_graph)$color_1 <- test_fun("darkgreen","blue",num_nodes)
V(test_graph)$color_2 <- test_fun("brown","blueviolet",num_nodes)
V(test_graph)$color_3 <- test_fun("red","green",num_nodes)
V(test_graph)$color_4 <- test_fun("red","green",num_nodes)

colors<-c("darkgreen","blue","blueviolet","brown","red","green")

v<-cbind(V(test_graph)$color_1,V(test_graph)$color_2,V(test_graph)$color_3,V(test_graph)$color_4)
values<-apply(v,1,function(x){
  sapply(colors,function(y){ifelse(y %in% x,1,0)})
})
values<-as.list(as.data.frame(values)) 

plot(test_graph, vertex.shape="pie", vertex.pie=values,
     vertex.pie.color=list(colors),
     vertex.size=seq(10,30,length=10))