R visNetwork: создать новый тип ребер - PullRequest
0 голосов
/ 04 мая 2018

Я хочу создать 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 Ответ

0 голосов
/ 04 мая 2018

Вы можете установить отдельные типы стрелок во фрейме данных 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)

Результат:

Resulting network

Этот подход работает для всех других атрибутов, которые вы можете установить с помощью visNodes и visEdges. См. здесь для примера.

...