R visNetwork: создать новый тип ребер
Я хочу создать PAG(родительский график предков) с visNetwork для моего блестящего приложения. Для этого мне нужно создать ребра, которые имеют как круги, так и стрелки. В соответствии с пакетом visNetwork я могу преобразовать стрелки в круги, как это
visNetwork(nodes, edges) %>%
visEdges(arrows = list(to = list(enabled = TRUE,
scaleFactor = 2, type = 'circle')))
Но я хочу, чтобы и стрелка, и круг, или два круга на одном краю, как на этой картинке PAG
Кажется, что работают arrows.from.type и arrows.to.type, но теперь у меня есть эта проблема. Я хочу нарисовать этот график в соответствии с матрицей смежности Итак, у меня есть этот код
i = 1
j = 1
for(i in i:ncol(results))
{
j = i
for(j in j:nrow(results))
{
if(results[j,i]==1)
{
dashBoard = c(dashBoard,TRUE)
colorBoard = c(colorBoard, "green")
if(results[i,j]==1)
{
fromtest <- c(fromtest,Cnames[i])
totest <- c(totest,Rnames[j])
arrfrom <-c(arrfrom,"circle")
arrto<-c(arrto,"circle")
}
else if(results[i,j]==2)
{
fromtest<-c(fromtest,Cnames[i])
totest<-c(totest,Rnames[j])
arrfrom <-c(arrfrom,"circle")
arrto<-c(arrto,"arrow")
}}
Это происходит для каждой возможной комбинации, кроме 1,1 и 1,2. В конце края напечатаны так
edgesprint <-data.frame(from = fromtest,
to = totest,
arrows.from.type=arrfrom,
arrows.to.type=arrto,
dashes = dashBoard,
physics = FALSE,
smooth = FALSE,
width = 3,
shadow = TRUE,
color = list(color = colorBoard, highlight = "red", hover = "green"),
links = links)
Этот метод работает хорошо, но иногда без изменения кода я получаю эту ошибку
ошибка в аргументах data.frame означает разное количество строк
1 ответ
Вы можете установить отдельные типы стрелок в edges
фрейм данных путем добавления столбцов arrows.to.type
а также arrows.from.type
:
library(visNetwork)
library(magrittr)
nodes <- data.frame(id=c("a","b","c","d"), label=c("a","b","c","d"))
edges <- data.frame(
from = c("a","a","a"),
to = c("b","c","d"),
arrows.from.type = c(NA,"circle","circle"),
arrows.to.type = c("arrow","circle",NA)
)
visNetwork(nodes, edges)
Результат:
Этот подход работает для всех других атрибутов, которые вы можете установить через visNodes
а также visEdges
, Смотрите здесь для примера.