首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:在visNetwork中保留相同的默认颜色集,即使在缺少组时也是如此

R:在visNetwork中保留相同的默认颜色集,即使在缺少组时也是如此
EN

Stack Overflow用户
提问于 2020-06-25 10:37:23
回答 2查看 708关注 0票数 3

我想用visNetwork包绘制一个网络。我希望我的节点跨所有不同的网络使用相同的颜色为同一组。所以我想

  • A组->蓝
  • B组->黄
  • C组为->红。

这是前3种默认颜色。下面是第一个简单的例子:

代码语言:javascript
复制
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“时,就会更混乱。

代码语言:javascript
复制
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”级别的顶部和下面,这并不好。

我曾经尝试过编辑列表,但这是行不通的。

我几乎可以通过为每个组明确定义我想要的颜色来实现我想要的东西。

代码语言:javascript
复制
visnw <- visNetwork(nodes, edges) %>%
  visGroups(groupname = "A", color = "lightblue") %>%
  visGroups(groupname = "B", color = "yellow") %>%
  visGroups(groupname = "C", color = "red") %>%
  visLegend(position = "right")
visnw

这给了我这样的想象:

我更喜欢使用默认的颜色,因为我喜欢它们,而且在默认方案中的节点上也有一个边缘,我也应该手动定义它们。有人知道如何做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2021-02-22 22:27:00

默认的组颜色选项由vis.js提供;您可以看到完整的列表这里

例如,根据上面链接中的参数列表,可以完全复制第一个组的默认组样式,如下所示:

代码语言:javascript
复制
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")))

或者,如果您只想更改显著参数,可以尝试以下操作:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2021-09-21 18:20:50

我相信,如果您希望"A“、"B”和"C“作为前三种默认颜色,而不管它们是否和如何使用,您可以先这样做:

代码语言:javascript
复制
visnw.groups.get("A");
visnw.groups.get("B");
visnw.groups.get("C");

.get()的默认行为是使用下一个可用的默认值创建每个组。

现在,您是以不同的顺序引入节点,还是在组"B“中没有节点,这并不重要,因为组是事先创建的。

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

https://stackoverflow.com/questions/62573408

复制
相关文章

相似问题

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