Как получить правильные узлы P ie в R igraph? - PullRequest
0 голосов
/ 09 января 2020

Я создаю сеть с p ie узлами, однако столкнулся с несколькими проблемами:

Значения, которые я имею для срезов p ie, не совпадают с полученным изображением

Пример:

#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)

Создает этот график:

image of plot produce

Очевидно, что это неправильно, например, узел 4 (IV) равен единице solid цвет, но вектор, определяющий его срезы, равен 4 5

Я не очень понимаю, почему это происходит, любая помощь будет отличной

Второй вопрос, который у меня есть, - как мне подобрать p ie срезы для цветов, например, все срезы в первом столбце = красный, а все во втором = желтый?

1 Ответ

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

Наиболее вероятная причина заключается в том, что код, который присваивает метки узлам (и не входит в него), присваивает метки неправильным узлам. Обратите внимание, что igraph разрезает p ie таким образом, чтобы общая площадь была равна сумме всех значений, предоставленных для этого узла в valuesq, поэтому для узла, который помечен как 4, значениеq [[правильное число]] равно вектору одно число (любое число) и ноль. Что касается вашего второго вопроса, ответ положительный. Вам просто нужно указать шестнадцатеричное значение (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])

Here is the graph.

> 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
...