如何在 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
我正在创建一个带有饼图节点的网络,但是我 运行 遇到了一些问题:
饼图切片的值与生成的图像不匹配
示例:
#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