1

我目前正在开发一个使用 VisNetwork 框架生成网络图的 R/Shiny 应用程序。我的同事需要我将生成的图导出到 Gephi。我已经查看了所有可能的选项,但没有一个是理想的。将 VisNetwork 图导出到 Gephi 的最佳方法是什么?

节点颜色、线宽、背景颜色……都无所谓——事实上,一般的审美并不重要。我们要做的是简单地将数据导出到 Gephi。一旦我们将这些数据加载到 Gephi 中,我们应该会得到一个类似的图,尽管有不同的美感。

现在,有不同的选项可以将文件加载到 Gephi 中。当我们查看Gephi 的文档时,我们可以看到最佳格式是GEFX(具有边缘权重、层次结构和 XML 结构)或CSV(具有边缘列表/矩阵结构)。

但是,VisNetwork 不允许导出到这些格式

Gephi 可以导出一个 JSon 文件,然后可以使用 VisNetwork 打开该文件 - 但似乎相反是不可能的。确实,VisNetwork 有这个功能visNetwork(gephi = 'network.json'),但它似乎不允许导出 json 文件,只允许导入。

VisNetwork 也提供了一个visExport()功能,但它只允许用户导出图像(png/jpg/pdf)。

这是一个非常简单的 VisNetwork 图作为最小可重现示例:

nodes <- data.frame(id = 1:10, label = paste("Label", 1:10), 
   group = sample(c("A", "B"), 10, replace = TRUE))

edges <- data.frame(from = c(2,5,10), to = c(1,2,10))
network <- visNetwork(nodes, edges, height = "400px", width = "100%") 

visNetwork(gephi = 'network.json') #does not work

最后,我可能不得不编写一个将图形数据写入文本文件的函数。在您看来,最好的方法是什么?我应该特权特定格式吗?

谢谢你。

4

2 回答 2

1

我知道这有点晚了,但无论如何我都会尽力提供帮助。Gephi 可以很好地从 CSV 文件中读取交互。所以:

R

您的示例几乎可以,只是边缘列名称略有变化:

nodes <- data.frame(id = 1:10, label = paste("Label", 1:10), 
   group = sample(c("A", "B"), 10, replace = TRUE))

edges <- data.frame(from = c(2,5,10), to = c(1,2,10))
colnames(edges)<-c('source', 'target')

然后你应该导出为 CSV:

write.csv(edges,'edges.csv')
write.csv(nodes,'nodes.csv')

格菲

然后,我们去 gephi 并且:

文件 -> 导入电子表格

请注意:

  1. 您必须一次导入一个文件的边和节点
  2. 您必须将两个 csv 文件导入同一个“工作区”,否则您将有两个不同的图形(空边和空节点)
于 2020-08-22T01:54:13.717 回答
1

Soo 几天后,我没有答案,于是又深入研究了它。事实上,没有办法将数据从 VisNetwork 图直接导出到 Gephi。我发现最有效的方法是硬写入 GEXF 文件。这有点乏味,但您的数据将毫无顾虑地加载到 Gephi 中。

于 2019-07-11T09:03:37.390 回答