【问题标题】:Sankey Diagram for transitions转换的桑基图
【发布时间】:2018-02-13 16:49:18
【问题描述】:

我正在尝试从下面的堆栈溢出问题Sankey diagram in R复制代码和问题

添加一些示例数据

head(links) #Data.frame

Source   Target  Weight 
 Fb        Google  20 
 Fb         Fb      2
 BBC        Google 21
 Microsoft  BBC    16 

head(nodes) 
Fb
BBC
Google
Microsoft 

构建 sankey 转换流的代码

sankeyNetwork(Links = links, 
              Nodes = nodes, 
              Source = "Source",
              Target = "Target", 
              Value = "value", 
              fontSize = 12, 
              nodeWidth = 30)

上面提到的堆栈溢出帖子提到源和目标的索引应为 0。但是,如果我尝试相同的语法,我的源和目标中会出现 NA。什么可能导致此错误?

【问题讨论】:

    标签: r sankey-diagram networkd3


    【解决方案1】:

    您可以将链接数据框中的源变量和目标变量转换为节点数据框中节点的索引,如下所示...

    links <- read.table(header = T, text = "
    Source   Target  Weight
    Fb        Google  20
    Fb         Fb      2
    BBC        Google 21
    Microsoft  BBC    16
    ")
    
    nodes <- read.table(header = T, text = "
    name
    Fb
    BBC
    Google
    Microsoft
    ")
    
    # set the Source and Target values to the index of the node (zero-indexed) in
    # the nodes data frame
    links$Source <- match(links$Source, nodes$name) - 1
    links$Target <- match(links$Target, nodes$name) - 1
    
    print(links)
    print(nodes)
    
    # use the name of the column in the links data frame that contains the values
    # for the value you pass to the Value parameter (e.g. "Weight" not "value")
    library(networkD3)
    sankeyNetwork(Links = links, Nodes = nodes, Source = "Source", 
                  Target = "Target", Value = "Weight",
                  fontSize = 12, nodeWidth = 30)
    

    【讨论】:

      【解决方案2】:

      这段代码产生了底部的情节。有关代码更改的说明,请参阅我的 cmets。而且,这里有一个很棒的资源:@​​987654321@

      library(networkD3)  
      
      # change to numeric index starting at 0.  I assigned Fb to zero, and so on
      links <- data.frame(Source = c(0, 0, 1, 2),
                           Target = c(3, 0, 3, 1),
                           Weight = c(20, 2, 21, 16))
      
      # a nodes dataframe (or dataframe element of a list, as in the help) is needed
      nodes <- data.frame(name = c("Fb", "Google", "BBC", "MS"))
      
      sankeyNetwork(Links = links, 
                    Nodes = nodes, 
                    Source = "Source",
                    Target = "Target", 
                    Value = "Weight",   # changed from "value"
                    fontSize = 12, 
                    nodeWidth = 30)   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-06
        • 2010-12-09
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-06
        相关资源
        最近更新 更多