我正在使用Shiny应用程序,该应用程序使用VisNetwork显示网络图。 我的节点之间有两种关系(所以有两种边)。
其中一些表示一个参数与另一个参数的相关性,其中一些表示两个节点之间的简单链接。第一种边缘称为t1,是方向。第二种类型t2是非定向。
我想同时绘制两个数据集。属于第一组的边缘将由箭头表示,属于第二组的边缘将由线表示。
请注意,这并不是指节点组,而是指边的类型。节点组对边的类型没有影响。
在VisNetwork中,可以使用visEdges
函数来更改边缘的样式。默认情况下,边线是简单的线。 visEdges(arrows = "to")
将显示箭头。但这会更改图中所有边缘的边缘样式。我只希望属于我上面描述的第一组的边缘。
以下是可重现的示例:
ui.R:
visNetworkOutput("plot"),
server.R:
n <- data.frame(id = c(1, 2, 3, 4, 5, 6), label = c("a", "b", "c", "d", "e", "f"), group = c("A", "A", "B", "B", "C", "C"), value = c(4,7,5,3,4,6), stringsAsFactors = FALSE)
e <- data.frame(from = c(1, 1, 2, 2, 3, 3), to = c(2, 3, 4, 5, 5, 6), value = c(0.1,0.25,0.2,0.3,0.15,0.4), type = c("t1", "t1", "t1", "t2", "t2", "t1"), stringsAsFactors = FALSE)
net <- visNetwork(n,e) %>%
visLegend(useGroups = TRUE) %>%
visEdges(arrows = "to")
output$plot <- renderVisNetwork({net})
如本例所示,节点属于三个不同的组,但这对箭头没有影响。相反,我想要的是type
中e
参数的功能。如果为e$type="t1"
,我希望边缘为箭头。如果是e$type="t2"
,我希望它是一条简单的线。
在我的示例中,由于visEdges(arrows = "to")
,每个边缘将是箭头,而不仅仅是t1边缘。
这是我的图表的视觉表示:
|-->(2)--->(4)
| |
(1) |--------(5)
| |
| |----------
| |
|-->(3)--->(6)
如您所见,连接到(5)的边为类型t2(线),其他为t1类型(箭头)。