问题描述
我希望能够改变图表中节点的背景颜色,并使用边框颜色来确保与边相比能够很好地标记出节点。
我认为以下应该有效,但它没有:
nodes <- data.frame(id = 1:3,color = c("lightblue","red","blue"))
edges <- data.frame(from = c(1,2),to = c(1,3))
visNetwork(nodes,edges) %>% visNodes(color = list(border = "black"))
结果网络
我尝试直接向 visNodes 提供颜色向量,但失败了。事实上,颜色是从 data.frame 列颜色中保留的
visNetwork(nodes,edges) %>% visNodes(color = list(background = c("yellow","pink","blue"),border = "black"))
结果网络
visNetwork 是一个很棒的包,但在 StackOverflow 上查询不足。
在征得适当许可后,我代表 Charlie from GitHub 在此处发布此内容,主要是为了在 StackOverflow 上提供此内容,供其他 R 可视化爱好者在此处获得答案。
我不得不发布图片的超链接,因为我是 StackOverflow 的新手,并带有个人资料(作为分析顾问使用它多年,但没想过创建个人资料,不知道它的用途)并且在收集 10 个声望点之前不允许发布图片。
解决方法
这个案例很有趣。首先,我们可以将单独的选项传递给节点/边 data.frame,并使用 visNodes 和 visEdges 将全局选项传递给所有节点/边。
所以你不能这样做:
visNetwork(nodes,edges) %>% visNodes(color = list(background = c("yellow","pink","blue"),border = "black"))
但只需用这种方式指定一种背景和边框颜色:
visNetwork(nodes,edges) %>% visNodes(color = list(background = "blue",border = "black"))
color
可以是具有一个值的简单选项,也可以是更复杂的定义。在您的第一个示例中,data.frame 中 color
的定义似乎覆盖了 visNodes
选项。
从 0.2.1 开始,您现在可以像这样直接在 data.frame 中传递复杂的选项(列表):
nodes <- data.frame(id = 1:3,color.background = c("lightblue","red",color.border = "black")
edges <- data.frame(from = c(1,2),to = c(1,3))
visNetwork(nodes,edges)
等等:
nodes <- data.frame(id = 1:3,"blue"))
edges <- data.frame(from = c(1,edges) %>% visNodes(color = list(border = "black"))
PS:我自己发布了一个答案,因为这个对话已经在 GitHub 问题上可用了。只是想在这里记录它以方便社区。p>