2016-01-02 18 views
9

Cố gắng tạo một sơ đồ Sankey khá chung chung với sự trợ giúp của gói networkD3 của R. Chỉ để tham khảo - đây là ví dụ từ thủ công của góiBiểu đồ Sankey trong R

library(networkD3) 
library(jsonlite) 
library(magrittr) 

energy <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json" %>% 
     fromJSON 

sankeyNetwork(Links = energy$links, 
       Nodes = energy$nodes, 
       Source = "source", 
       Target = "target", 
       Value = "value", 
       NodeID = "name", 
       units = "TWh", 
       fontSize = 12, 
       nodeWidth = 30) 

mà kết quả trong:

reference Sankey diagram from manual

mở rộng khá đơn giản của tôi bao gồm việc xây dựng một sơ đồ với các dữ liệu cơ bản sau đây:

links <- structure(list(source = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 4L, 
             5L, 4L, 5L), 
             .Label = c("1", "2", "3", "4", "5"), 
             class = "factor"), 
        target = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 4L, 
             4L), 
             .Label = c("4", "5", "6", "7"), 
             class = "factor"), 
        value = c(88L, 774L, 1220L, 412L, 5335L, 96L, 3219L, 
           1580L, 111L, 7607L)), 
       row.names = c(NA, 10L), 
       class = "data.frame", 
       .Names = c("source", "target", "value")) 

nodes <- structure(list(lab = c("A", "B", "C", "D", "E", "F", "G")), 
       row.names = c(NA, -7L), 
       .Names = "lab", class = "data.frame") 

với ứng dụng đơn giản này được chọn sao cho dữ liệu của tôi phản ánh chặt chẽ nhất ví dụ thủ công. Tuy nhiên, khi tôi chạy hàm có thể so sánh:

sankeyNetwork(Links = links, 
       Nodes = nodes, 
       Source = "source", 
       Target = "target", 
       Value = "value", 
       NodeID = "lab") 

Không có gì xảy ra. Sai lầm của tôi là gì?

Trả lời

9

này hoạt động tốt nếu bạn bắt đầu đánh số source của bạn và target tại 0:

# First coercing elements of links to numeric, so that we can subtract 1 
links[] <- lapply(links, function(x) as.numeric(as.character(x))) 
links[, 1:2] <- links[, 1:2] - 1 
sankeyNetwork(links, nodes, 'source', 'target', 'value', NodeID='lab') 

enter image description here

Các vấn đề liên quan