代码之家  ›  专栏  ›  技术社区  ›  Skampak

R visNetwork:创建新类型的边

  •  0
  • Skampak  · 技术社区  · 6 年前

    我想用visNetwork为我的闪亮应用程序创建一个PAG(父母祖先图)。 为了做到这一点,我必须创建既有圆又有箭头的边。 根据visNetwork软件包,我可以将箭头转换为如下圆圈

    visNetwork(nodes, edges) %>% 
      visEdges(arrows = list(to = list(enabled = TRUE, 
         scaleFactor = 2, type = 'circle')))
    

    但是我想要一个箭头和一个圆,或者像这张图片一样在一条边上有两个圆 PAG

    箭头。从…起键入和箭头。到类型似乎是工作,但我现在我有这个问题。 我想根据邻接矩阵画这个图 所以我有这个密码

      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)
    

    这个方法很好用,但有时在不更改任何代码的情况下,我会遇到这个错误

    数据错误。框架参数表示不同的行数

    1 回复  |  直到 6 年前
        1
  •  1
  •   Simon Larsen    6 年前

    可以在中设置各个箭头类型 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 看见 here 例如。