数据框
df <- data.frame(
"Level" = c(0,1,2,2,1,2)
,"Name" = c("A","B","C","D","E","F")
,"Value" = 1:6
,stringsAsFactors = FALSE
)
如果下一行的级别大于当前行,则它是当前行的子级。
例如,上述数据框将转换为图表,如下所示
对角线网络
我尝试了什么
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闪亮的应用程序。请提供相应的解决方案。
答案 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)