首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有R库的三键图networkD3不显示颜色

带有R库的三键图networkD3不显示颜色
EN

Stack Overflow用户
提问于 2016-08-02 15:19:33
回答 2查看 3.5K关注 0票数 1

我使用R的networkD3库来创建Sankey网络。虽然这对我来说很好,但我现在遇到了一个问题:将属性"NoteID“和/或"NoteGroup”分配给组和分配颜色,如https://christophergandrud.github.io/networkD3/#sankey中所示。

下面的代码显示了创建Sankey图的4个示例,只有"Sankey4“按设计的方式工作,即没有颜色:

代码语言:javascript
运行
复制
library(networkD3)
#Unique list of nodes
my_nodes = structure(list(name = c("HawaiTEST", "AMSVOASMPP01", "App1", 
                                   "Transfer", "Transferred_tel__63null_",
                                   "Transferred_tel__631100107_", 
                                   "AMSVOASMPP02",
                                   "Transferred_tel__631100108_",
                                   "Transferred_tel__631100106_", 
                                   "Transferred_tel__631100104_",
                                   "Transferred_tel__631100105_", 
                                   "FarEndDisconnect",
                                   "FarEndDisconnect_Hangup", "DutchAOS",
                                   "SwedenAOS", 
                                   "Transferred_tel__63000_")), class =
c("tbl_df", "tbl", "data.frame"
  ), row.names = c(NA, -16L), .Names = "name")

# Network
my_links = structure(list(key = c("0_1", "0_6", "1_13", "1_14", "1_2", "11_12", 
                                  "13_11", "13_3", "14_11", "14_3", "2_11",
                                  "2_3", "3_10", "3_15", 
                                  "3_4", "3_5", "3_7", "3_8", "3_9", "6_13",
                                  "6_2"), source = c(0L, 
                                  0L, 1L, 1L, 1L, 11L, 13L, 13L, 14L, 14L, 2L,
                                  2L, 3L, 3L, 3L, 
                                  3L, 3L, 3L, 3L, 6L, 6L), target = c(1L, 6L,
                                  13L, 14L, 2L, 12L, 
                                  11L, 3L, 11L, 3L, 11L, 3L, 10L, 15L, 4L, 5L,
                                  7L, 8L, 9L, 13L, 
                                  2L), total = c(38L, 36L, 4L, 3L, 31L, 6L, 2L,
                                  5L, 1L, 2L, 3L, 
                                  61L, 11L, 1L, 12L, 11L, 11L, 11L, 11L, 3L,
                                  33L)), class = c("tbl_df", 
                          "tbl", "data.frame"), row.names = c(NA, -21L), .Names
= c("key", 
    "source", "target", "total"))


# NOT WORKING using  "NodeID", or "NodeGroup"
sankey1 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source =
                           "source", Target = "target", Value = "total", units =
                           "calls", NodeID = "name")

sankey2 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source =
                           "source", Target = "target", Value = "total", units =
                           "calls", NodeGroup = "name")
sankey2

# NOT WORKING using ColourScale (diagram is displayed, grey scale though)
ColourScale <- 'd3.scale.ordinal()
            .domain(["lions", "tigers"])
           .range(["#FF6900", "#694489"]);'
sankey3 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source =
                           "source", Target = "target", Value = "total", units =
                           "calls", colourScale = JS(ColourScale))
sankey3

# WORKING! 

sankey4 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source =
                           "source", Target = "target", Value = "total", units =
                           "calls")
sankey4

"Sankey1“尝试使用"NoteID”,就像在上面引用的web示例中使用的那样,但是,这样做会导致图表完全不显示;"Sankey2“的效果也是一样的。无论配色方案的定义如何,"Sankey4“都以灰色显示。

我还查看了这两种代码生成的html代码,生成"Sankey1“的R代码以及https://christophergandrud.github.io/networkD3/#sankey上使用的代码。显然,对于该小组,存在着不同之处:

来自“Sankey1”的HTML:

代码语言:javascript
运行
复制
"group":{"name":["HawaiTEST", ...
...
"options":{"NodeID":1,"NodeGroup":"name","LinkGroup":null,

HTML摘录自web示例:

代码语言:javascript
运行
复制
"group":["Agricultural 'waste'","Bio-conversion", ...
...
"options":{"NodeID":"name","NodeGroup":"name","LinkGroup":null

为"Sankey1“更改输出html以反映来自web示例的输出解决了问题,使用默认的颜色模式显示"Sankey1”。

目前,我正试图了解我正在使用的数据的行为。sankey函数不依赖强制性列表输入;实际上,我已经将示例数据集从网站分割为两个数据框架(节点、链接),这确实产生了与web示例中相同颜色的sankey图。因此,我的示例中的输入数据一定有问题.我猜..。任何帮助都将不胜感激!谢谢奥利

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-27 02:09:53

我也有过类似的问题。我通过减少节点总数来解决这个问题(只过滤高于某个值的边缘)。

票数 0
EN

Stack Overflow用户

发布于 2016-08-03 11:14:14

也许,我误解了,但是使用CRAN或Github版本,sankey1会为我生成以下内容,节点的颜色与它们的名称相同。

如果我们想使用NodeGroup,我们可以这样做。

代码语言:javascript
运行
复制
# make up a group based on the first two characters
#  of node name
my_nodes$group <- substr(my_nodes$name,1,2)
# now use our new group for group colors
sankeyNetwork(
  Links =my_links, Nodes = my_nodes, Source = "source",
  Target = "target", Value = "total", NodeID = "name",
  units = "calls",
  NodeGroup = "group"
)

如果我们想提供一个定制的色标,我们可以这样做。

代码语言:javascript
运行
复制
sankeyNetwork(
  Links =my_links, Nodes = my_nodes, Source = "source",
  Target = "target", Value = "total", NodeID = "name",
  units = "calls",
  NodeGroup = "group",
  colourScale = "d3.scale.category10()"
)

对于颜色的自定义分配,我们可以扩展前面的示例并关闭d3.scale.category*函数。

代码语言:javascript
运行
复制
sankeyNetwork(
  Links =my_links, Nodes = my_nodes, Source = "source",
  Target = "target", Value = "total", NodeID = "name",
  units = "calls",
  NodeGroup = "group",
  colourScale = sprintf(
    "d3.scale.category10().range(%s).domain(%s)",
    jsonlite::toJSON(substr(topo.colors(length(unique(my_nodes$group))),1,7)),
    jsonlite::toJSON(unique(my_nodes$group))
  )
)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38724455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档