3

包包含一些非常好的函数,用于创建明显的网络。不同的函数有不同的参数,所以这个问题专门针对radialNetwork() 函数。是否可以根据给定的向量使节点笔划的颜色发生变化?

下面的代码创建了一个网络图,但将节点笔划的参数更改为包含不同颜色的向量不起作用。

library(networkD3)
library(tidyverse)
library(data.tree)

## Data
input <- list(number=50)
Data_tree <- data.frame(Start="Class",
                      Asset = sample(c("FI","Equity","Currency","Commodities"),input$number,replace = TRUE),
                      Sub_Asset = sample(c("Asia","Europe","USA","Africa","ME"),input$number,replace = TRUE),
                      Ticker = replicate(input$number,paste0(sample(LETTERS,3),collapse=""))) %>% 
unite(col="pathString",Start,Asset,Sub_Asset,Ticker,sep="-",remove=FALSE) %>%
select(-Start) %>% as.Node(pathDelimiter = "-")



radialNetwork(ToListExplicit(Data_tree, unname = TRUE ), 
           linkColour = "#ccc",
           nodeColour = "#fff",
           nodeStroke = "orange",
           textColour = "#cccccc")

在此处输入图像描述

4

1 回答 1

4

不直接... 不支持该功能。但是,您可以将自己的 JavaScript 注入该属性。

例如,如果您有一个按正确顺序排列的颜色名称向量,则可以将其转换为 JavaScript 数组(格式为:["red", "blue", "green"])并使用包中的JS函数htmlwidget构建一个函数以传递 nodeStroke 参数。

colorVector <- c("black", "red", "blue", "green", "orange", 
    rep("red", 5), rep("blue", 5), rep("green", 4), rep("orange", 4),
    rep("red", 11), rep("blue", 14), rep("green", 14), rep("orange", 11))

jsarray <- paste0('["', paste(colorVector, collapse = '", "'), '"]')
nodeStrokeJS <- JS(paste0('function(d, i) { return ', jsarray, '[i]; }'))

radialNetwork(ToListExplicit(Data_tree, unname = TRUE ), 
    linkColour = "#ccc",
    nodeColour = "#fff",
    nodeStroke = nodeStrokeJS,
    textColour = "#cccccc")
于 2017-03-03T09:03:43.147 回答