我想用visNetwork包绘制一个网络。我希望我的节点跨所有不同的网络使用相同的颜色为同一组。所以我想
这是前3种默认颜色。下面是第一个简单的例子:
nodes <- data.frame(id = 1:10, label = paste("Label", 1:10),
group = factor(c("A","B","C", "A","C","C","C","A","A","A"), levels=c("A","B","C")))
visnw <- visNetwork(nodes, edges) %>%
visLegend(position = "right")
visnw 这给了我们

但是当我忽略组B时,即使我指定列' group‘是包含3个级别的因素,颜色“红色”也消失了,这个事实在可视化中被忽略了。此外,当第一个元素不是"A“时,就会更混乱。
nodes <- data.frame(id = 1:10, label = paste("Label", 1:10),
group = factor(c("C","A","C", "A","C","C","C","A","A","A"),c("A","B","C"))) %>%
dplyr::arrange(group) #needed to have A as first group but it doesn't seem to have an effect on the second visualisation
edges <- data.frame(from = c(2,5,10), to = c(1,2,10))
visnw <- visNetwork(nodes, edges) %>%
visLegend(position = "right")
visnw 但是,上面的代码给了我这个错误,因为C组必须有红色。另外,由于节点1、3、5、6、7属于组"C“而不是"A”,所以组被切换。后一个问题在我省略OR排表()时没有变化,但是图例中的"C“级别位于"A”级别的顶部和下面,这并不好。

我曾经尝试过编辑列表,但这是行不通的。
我几乎可以通过为每个组明确定义我想要的颜色来实现我想要的东西。
visnw <- visNetwork(nodes, edges) %>%
visGroups(groupname = "A", color = "lightblue") %>%
visGroups(groupname = "B", color = "yellow") %>%
visGroups(groupname = "C", color = "red") %>%
visLegend(position = "right")
visnw这给了我这样的想象:

我更喜欢使用默认的颜色,因为我喜欢它们,而且在默认方案中的节点上也有一个边缘,我也应该手动定义它们。有人知道如何做到这一点吗?
发布于 2021-02-22 22:27:00
默认的组颜色选项由vis.js提供;您可以看到完整的列表这里。
例如,根据上面链接中的参数列表,可以完全复制第一个组的默认组样式,如下所示:
visnw <- visNetwork(nodes, edges) %>%
## 0: blue
visGroups(groupname = "A", color = list(border = "#2B7CE9", background = "#97C2FC", highlight = list(border = "#2B7CE9", background = "#D2E5FF"), hover = list(background = "#2B7CE9", border = "#D2E5FF")))或者,如果您只想更改显著参数,可以尝试以下操作:
visnw <- visNetwork(nodes, edges) %>%
## 0: blue
visGroups(groupname = "A", color = list(border = "#2B7CE9", background = "#97C2FC")) %>%
## 1: yellow
visGroups(groupname = "B", color = list(border = "#FFA500", background = "#FFFF00")) %>%
## 2: red
visGroups(groupname = "C", color = list(border = "#FA0A10", background = "#FB7E81")) %>%
visLegend(position = "right")
visnw发布于 2021-09-21 18:20:50
我相信,如果您希望"A“、"B”和"C“作为前三种默认颜色,而不管它们是否和如何使用,您可以先这样做:
visnw.groups.get("A");
visnw.groups.get("B");
visnw.groups.get("C");.get()的默认行为是使用下一个可用的默认值创建每个组。
现在,您是以不同的顺序引入节点,还是在组"B“中没有节点,这并不重要,因为组是事先创建的。
https://stackoverflow.com/questions/62573408
复制相似问题