R networkD3 diagonalNetwork 着色叶节点
R networkD3 diagonalNetwork coloring leaf nodes
问题描述
我有一个将被聚类的数据框和一个定义节点颜色的数据框,如下所示:
# DATA
color.df <- data.frame(
name = c('node1',"node2","node3"),
color = c('green','red','blue')
)
data.df <- t(data.frame(
node1 = c(1,2,3,5),
node2 = c(4,5,3,5),
node3 = c(3,3,2,1)
))
然后我应用层次聚类并将其转换为径向网络:
# CLUSTERING
distance.mat <- dist(data.df)
hc <- hclust(distance.mat)
rad <- as.radialNetwork(hc, '')
diagonalNetwork(List = rad)
现在我想根据 color.df
为节点着色,当所有节点颜色都已知时这是可行的(如回答 ),但是这变得更难,因为只有叶子应该是彩色(显然我的网络比这个例子复杂得多)。
我试过的
我认为要走的路是将节点名称映射到颜色,使用这样的 JS:
function test(d, i) { return { "node1" : "green", "node2" : "red", "node3" : "blue" }[d] }
test("node1")
我试图在 R 中实现这个:
w <- paste('{', paste(color.df %>%
mutate(name = paste0('"', name), color = paste0(color, '"')) %>%
unite('x', c(name, color), sep = '" : "' ) %>%
.$x, collapse= ', '), '}', collapse = '')
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.name]; }'))
rad <- as.radialNetwork(hc, '')
dn <- diagonalNetwork(List = rad, nodeColour = node.col.func)
这不起作用,但代码本身有效,因为我对其进行硬编码,节点变色了:
node.col.func <- JS(paste0('function(d, i) { return ', w, '["node1"]; }'))
如果我使用警报 d.name
将 return 'undefined',因此显然我无法在此处访问节点名称。
经过一些迷惑我发现我必须通过d.data.name
而不是d.name
访问节点名称。
所以行:
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.name]; }'))
应替换为:
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.data.name]; }'))
问题描述
我有一个将被聚类的数据框和一个定义节点颜色的数据框,如下所示:
# DATA
color.df <- data.frame(
name = c('node1',"node2","node3"),
color = c('green','red','blue')
)
data.df <- t(data.frame(
node1 = c(1,2,3,5),
node2 = c(4,5,3,5),
node3 = c(3,3,2,1)
))
然后我应用层次聚类并将其转换为径向网络:
# CLUSTERING
distance.mat <- dist(data.df)
hc <- hclust(distance.mat)
rad <- as.radialNetwork(hc, '')
diagonalNetwork(List = rad)
现在我想根据 color.df
为节点着色,当所有节点颜色都已知时这是可行的(如回答
我试过的
我认为要走的路是将节点名称映射到颜色,使用这样的 JS:
function test(d, i) { return { "node1" : "green", "node2" : "red", "node3" : "blue" }[d] }
test("node1")
我试图在 R 中实现这个:
w <- paste('{', paste(color.df %>%
mutate(name = paste0('"', name), color = paste0(color, '"')) %>%
unite('x', c(name, color), sep = '" : "' ) %>%
.$x, collapse= ', '), '}', collapse = '')
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.name]; }'))
rad <- as.radialNetwork(hc, '')
dn <- diagonalNetwork(List = rad, nodeColour = node.col.func)
这不起作用,但代码本身有效,因为我对其进行硬编码,节点变色了:
node.col.func <- JS(paste0('function(d, i) { return ', w, '["node1"]; }'))
如果我使用警报 d.name
将 return 'undefined',因此显然我无法在此处访问节点名称。
经过一些迷惑我发现我必须通过d.data.name
而不是d.name
访问节点名称。
所以行:
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.name]; }'))
应替换为:
node.col.func <- JS(paste0('function(d, i) { return ', w, '[d.data.name]; }'))