如何在VisNetwork中将某些边缘显示为箭头,将某些边缘显示为简单线?

时间:2019-08-23 13:45:19

标签: r graph shiny visnetwork

我正在使用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})

如本例所示,节点属于三个不同的组,但这对箭头没有影响。相反,我想要的是typee参数的功能。如果为e$type="t1",我希望边缘为箭头。如果是e$type="t2",我希望它是一条简单的线。

在我的示例中,由于visEdges(arrows = "to"),每个边缘将是箭头,而不仅仅是t1边缘。


这是我的图表的视觉表示:

     |-->(2)--->(4)
     |    |
    (1)   |--------(5)
     |              |
     |    |----------
     |    |
     |-->(3)--->(6)

如您所见,连接到(5)的边为类型t2(线),其他为t1类型(箭头)。

0 个答案:

没有答案