是否存在对sankey图的节点限制?我正在尝试创建一个包含大量节点的绘图,以下代码无法生成绘图(但没有给出错误警告)。
知道这里发生了什么吗?
# sankey chart using d3 plugin for rCharts and the igraph library
require(rCharts)
require(igraph)
# these are our vertices/nodes/end points/stages/categories/classes/whatever
nodes = c(1:36)
# the chart is basically a graph
pairs=c()
for (j in seq(1,36,by=4)) pairs=c(pairs,j,j+1,j+1,j+2,j+2,j+3)
pairs
g <- graph(pairs)
plot(g)
E(g)
E(g)$weights <- rep(c(16667,500,100),9)
length(E(g)$weights)
# convert to data frame with appropriate node names
edgelist <- get.data.frame(g)
# name columns as what is expected by plugin
colnames(edgelist) <- c("source", "target", "value")
edgelist
edgelist$source <- lapply(edgelist$source, FUN = function(x) {nodes[x]})
edgelist$target <- lapply(edgelist$target, FUN = function(x) {nodes[x]})
edgelist
# now we plot
sankeyPlot <- rCharts$new()
sankeyPlot$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey/libraries/widgets/d3_sankey')
sankeyPlot$set(
data = edgelist,
nodeWidth = 15,
nodePadding = 15,
layout = 32,
width = 960,
height = 500
)
sankeyPlot
答案 0 :(得分:1)
见http://timelyportfolio.github.io/rCharts_d3_sankey/example_build_network_sankey.html。截至目前,edgelist的源列和目标列必须是字符。另外,将lapply
更改为sapply
。
我希望结果图表仍然不是您想要的,但至少它会显示出来,所以可能需要查看上面提到的link,以确保您的网络符合预期的正确Sankey。 / p>
# sankey chart using d3 plugin for rCharts and the igraph library
require(rCharts)
require(igraph)
# these are our vertices/nodes/end points/stages/categories/classes/whatever
nodes = c(1:36)
# the chart is basically a graph
pairs=c()
for (j in seq(1,36,by=4)) pairs=c(pairs,j,j+1,j+1,j+2,j+2,j+3)
pairs
g <- graph(pairs)
plot(g)
E(g)
E(g)$weights <- rep(c(16667,500,100),9)
length(E(g)$weights)
# convert to data frame with appropriate node names
edgelist <- get.data.frame(g)
# name columns as what is expected by plugin
colnames(edgelist) <- c("source", "target", "value")
edgelist
edgelist$source <- sapply(edgelist$source, FUN = function(x) {as.character(nodes[x])})
edgelist$target <- sapply(edgelist$target, FUN = function(x) {as.character(nodes[x])})
edgelist
# now we plot
sankeyPlot <- rCharts$new()
sankeyPlot$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey/libraries/widgets/d3_sankey')
sankeyPlot$set(
data = edgelist,
nodeWidth = 15,
nodePadding = 15,
layout = 32,
width = 960,
height = 800
)
sankeyPlot