将 VisNetwork (R) 图导出到 Gephi
Export a VisNetwork (R) plot to Gephi
我目前正在开发一个 R/Shiny 应用程序,该应用程序使用 VisNetwork 框架生成网络图。我的同事需要我 将生成的图导出到 Gephi。我已经查看了所有可能的选项,但其中 none 是最理想的。 将 VisNetwork 图导出到 Gephi 的最佳方法是什么?
节点颜色、线宽、背景颜色...无关紧要 - 事实上,一般来说美观并不重要。我们想要做的是简单地 将数据导出到 Gephi。 一旦我们将这些数据加载到 Gephi 中,我们应该会得到一个类似的图,尽管具有不同的美学。
现在,有不同的选项可以将文件加载到 Gephi 中。当我们查看 Gephi's documentation 时,我们可以看到最佳格式是 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
最后,我可能不得不编写一个将图形数据写入文本文件的函数。在您看来,最好的方法是什么?我应该为特定格式赋予特权吗?
谢谢。
Soo 几天后我没有得到答案,于是又深入研究了它。事实上,没有办法直接将数据从 VisNetwork 图导出到 Gephi。我发现最有效的方法是 hard-write 到 GEXF 文件中。这有点乏味,但您的数据将毫无顾虑地加载到 Gephi 中。
我知道有点晚了,但无论如何我都会尽力帮忙。 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然后:
文件 -> 导入电子表格
请注意:
- 您必须一次导入边和节点一个文件
- 您必须将两个 csv 文件导入同一个“工作区”,否则您将有两个不同的图形(空边和空节点)
我目前正在开发一个 R/Shiny 应用程序,该应用程序使用 VisNetwork 框架生成网络图。我的同事需要我 将生成的图导出到 Gephi。我已经查看了所有可能的选项,但其中 none 是最理想的。 将 VisNetwork 图导出到 Gephi 的最佳方法是什么?
节点颜色、线宽、背景颜色...无关紧要 - 事实上,一般来说美观并不重要。我们想要做的是简单地 将数据导出到 Gephi。 一旦我们将这些数据加载到 Gephi 中,我们应该会得到一个类似的图,尽管具有不同的美学。
现在,有不同的选项可以将文件加载到 Gephi 中。当我们查看 Gephi's documentation 时,我们可以看到最佳格式是 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
最后,我可能不得不编写一个将图形数据写入文本文件的函数。在您看来,最好的方法是什么?我应该为特定格式赋予特权吗?
谢谢。
Soo 几天后我没有得到答案,于是又深入研究了它。事实上,没有办法直接将数据从 VisNetwork 图导出到 Gephi。我发现最有效的方法是 hard-write 到 GEXF 文件中。这有点乏味,但您的数据将毫无顾虑地加载到 Gephi 中。
我知道有点晚了,但无论如何我都会尽力帮忙。 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然后:
文件 -> 导入电子表格
请注意:
- 您必须一次导入边和节点一个文件
- 您必须将两个 csv 文件导入同一个“工作区”,否则您将有两个不同的图形(空边和空节点)