如何在 R igraph 中获得正确的饼图节点?

How to get correct Pie Nodes in R igraph?

我正在创建一个带有饼图节点的网络,但是我 运行 遇到了一些问题:

饼图切片的值与生成的图像不匹配

示例:

#generate random slice for my pie charts 
valuesq <- lapply(1:23, function(x) sample(0:5,2)) 

[[1]]
[1] 1 0

[[2]]
[1] 5 1

[[3]]
[1] 1 0

[[4]]
[1] 4 5

[[5]]
[1] 5 3

[[6]]
[1] 1 2

[[7]]
[1] 5 2

[[8]]
[1] 0 2

[[9]]
[1] 0 3

[[10]]
[1] 1 5

[[11]]
[1] 5 3

[[12]]
[1] 5 4

[[13]]
[1] 3 1

[[14]]
[1] 0 3

[[15]]
[1] 4 5

[[16]]
[1] 3 1

[[17]]
[1] 4 1

[[18]]
[1] 4 2

[[19]]
[1] 1 2

[[20]]
[1] 2 4

[[21]]
[1] 1 4

[[22]]
[1] 1 2

[[23]]
[1] 4 1


#plot my chart which has 23 nodes 
plot(newig,vertex.shape="pie",vertex.size=20, vertex.pie=valuesq, label.dist=1, label.degree=pi/4)

它产生了这个情节:

显然这是错误的,例如节点 4(IV) 是一种纯色,但定义其切片的向量是 4 5

我真的不明白为什么会发生这种情况任何帮助都会很好

我的第二个问题是如何将饼图切片与颜色相匹配,例如第一列中的所有切片 = 红色,第二列中的所有切片 = 黄色?

最可能的原因是将标签分配给节点的代码(未包含)将标签分配给了错误的节点。请注意,igraph 以总面积等于 valuesq 中为该节点提供的所有值的总和的方式对饼图进行切片,因此对于标记为 4 的节点,valuesq[[correctnodenumber]] 等于一个数字的向量(任何数字)和一个零。关于你的第二个问题,答案是肯定的。您只需要提供十六进制值(google 单词 "colorpicker")。希望以下代码和解释对您有所帮助。

library(igraph)

newig <- graph.star(n=23,mode="undirected")

valuesq <- lapply(1:23, function(x) c(sample(0:5,2)))
#you can assign up to 5 colors(random colors or exact hex values)
#to 5 slices. Exact hex values could be assigned to all nodes:
V(newig)$pie.color=list(c("#E495A5", "#BDAB66"))
#or to a specific node 
V(newig)[10]$pie.color=list(c("#00FF66FF", "#CC00FFFF"))
# let's set a seed number to regenerate the graph so that nodes are 
#positioned at the same place every time you run the code.

set.seed(1234)

plot(newig,
 vertex.shape="pie", 
 vertex.size=25, 
 vertex.pie=valuesq,
 vertex.label.dist=0.8,
 vertex.label.cex=0.6, 
 vertex.label.degree=pi,
 vertex.label=LETTERS[1:23])

> valuesq 
> [[1]] [1] 2 3
> 
> [[2]] [1] 1 5
> 
> [[3]] [1] 0 1
> 
> [[4]] [1] 5 0
> 
> [[5]] [1] 1 4
> 
> [[6]] [1] 0 2
> 
> [[7]] [1] 4 3
> 
> [[8]] [1] 1 0
> 
> [[9]] [1] 4 5
> 
> [[10]] [1] 4 1
> 
> [[11]] [1] 5 2
> 
> [[12]] [1] 5 3
> 
> [[13]] [1] 0 5
> 
> [[14]] [1] 5 1
> 
> [[15]] [1] 2 3
> 
> [[16]] [1] 2 1
> 
> [[17]] [1] 3 2
> 
> [[18]] [1] 4 0
> 
> [[19]] [1] 2 3
> 
> [[20]] [1] 3 0
> 
> [[21]] [1] 5 4
> 
> [[22]] [1] 4 5
> 
> [[23]] [1] 3 2