使用R中的Data.Frame生成对角网络图表

时间:2017-05-31 12:42:13

标签: r csv tree shiny

数据框

df <- data.frame(
  "Level" = c(0,1,2,2,1,2)
  ,"Name" = c("A","B","C","D","E","F")
  ,"Value" = 1:6
  ,stringsAsFactors = FALSE
)

如果下一行的级别大于当前行,则它是当前行的子级。

例如,上述数据框将转换为图表,如下所示

对角线网络

**Diagonal Network**

我尝试了什么

1)将数据帧转换为csv(Data.csv),然后使用jsonlite将csv转换为JSON,然后将其作为列表传递给diagonalnetwork函数。请参阅下面的相同内容并更新路径

library(networkD3)
library(jsonlite)
setwd(Path)
df <- data.frame(
  "Level" = c(0,1,2,2,1,2)
  ,"Name" = c("A","B","C","D","E","F")
  ,"Value" = 1:6
  ,stringsAsFactors = FALSE)

write.csv(df, file =Path, row.names = FALSE)
data1DF<-read.csv("Data.csv", header=TRUE, sep=",")
myjson<-jsonlite::toJSON(data1DF)
write(myjson, "data.json")
Flare <- jsonlite::fromJSON("data.json", simplifyDataFrame =FALSE)
diagonalNetwork (List= Flare, fontSize = 10, opacity = 0.9, margin=0)

2)使用data.tree包将数据帧转换为JSON,然后作为列表传递给diagonalnetwork函数

library(data.tree)
library(networkD3)
df <- data.frame("Level" = c(0,1,2,2,1,2)
      ,"Name" = c("A","B","C","D","E","F")
      ,"Value" = 1:6
      ,stringsAsFactors = FALSE)

 df$pathString <- paste("root2", df$Level, df$Name, df$Value, sep="/")
 root2 <-as.Node(df[,-c(1, 2)])
 root2 <-as.list(root2)
 diagonalNetwork (List= root2, fontSize = 10, opacity = 0.9, margin=0)

但我的两次尝试都没有提供理想的结果。

我真正需要的是什么

从数千行的数据帧生成对角网络图表的解决方案,其层次结构与我们的数据帧类似。 对于图表的方向没有限制,无论是自上而下还是左上,我需要的是我的数据框架在适当的层次结构中。 最终,此图表将用于基于R闪亮的应用程序。请提供相应的解决方案。

1 个答案:

答案 0 :(得分:2)

这有效:

library(data.tree)
library(networkD3)
df <- data.frame(from = c('A', 'B', 'B', 'A', 'E'), 
                 to = c('B', 'C', 'D', 'E', 'F'), 
                 stringsAsFactors = FALSE)
root2 <- data.tree::FromDataFrameNetwork(df)

root2 <- as.list(root2, mode = 'explicit', unname = TRUE)

diagonalNetwork(List = root2, fontSize = 10, opacity = 0.9, margin = 0)