持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
导语
本文为我之前在CSDN平台上的一篇博客记录。原链接为:blog.csdn.net/u011426236/…
Gephi是一款基于NetBeans平台和Java的开源网络分析和可视化软件,它可用于研究共现分析,被许多可视化网站和论文中所使用,应用广泛。本篇博客记录使用了Gephi API的学习笔记。
环境配置
使用Gephi之前,我们需要先配置好Java环境,主要有以下三个部分:
- 安装好JDK环境
- 安装NetBeans IDE
- 将gephi-toolkit-0.9.2-all.jar下载完成
下载与安装
- JDK的配置
下载安装过程略去,详细可参考其他Java环境安装配置的教程
- NetBeans IDE的下载与安装
下载链接:Apache NetBeans Releases,这里有很多不同的下载包,选择适合自己系统的其中一个即可,这里我选择的是Java EE
在进行安装时,我们只要按提示一路安装下去即可。
- gephi-toolkit-0.9.2-all.jar的下载
下载链接:Gephi Toolkit
使用时,需要先将Toolkit进行下载,后续添加到项目的jar包中。
将gephi-toolkit作为jar包导入库
安装NetBeans成功后,我们新建一个项目,将gephi-toolkit作为jar包导入库,以方便后续自己的代码进行调用。
- 新建一个Java应用程序
- 在库(library)里右键添加JAR/文件夹
- 然后找到下载的gephi-toolkit文件的jar包进行添加
完成以上步骤后,我们就可以在自己的项目中对Gephi的API函数进行调用,来进行自定义的可视化。
一个简单示例
接下来展示一个简单示例,其中Gephi所需的绘图数据文件需要其他放置到相应文件夹中:
在NetBeans IDE中新建一个Java应用,导入gephi-toolkit.jar包后,创建一个主类,这里我将其命名为GephiTestDemo.java。
该文件中的代码内容为:
package gephitestdemo;
/**
* @author Qi
*/
public class GephiTestDemo {
public static void main(String[] args) {
GephiDemo g = new GephiDemo();
g.Run();
}
}
完成以上编写后,我们继续新建一个Java文件名叫GephiDemo.java。
其中的代码内容为:
package gephitestdemo;
import java.io.File;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.GraphController;
import org.gephi.graph.api.GraphModel;
import org.gephi.io.importer.api.Container;
import org.gephi.io.importer.api.EdgeDirectionDefault;
import org.gephi.io.importer.api.EdgeMergeStrategy;
import org.gephi.io.importer.api.ImportController;
import org.gephi.io.processor.plugin.AppendProcessor;
import org.gephi.io.processor.plugin.DefaultProcessor;
import org.gephi.project.api.ProjectController;
import org.gephi.project.api.Workspace;
import org.openide.util.Lookup;
import org.openide.util.Utilities;
/**
*
* @author Qi
*/
public class GephiDemo {
GephiDemo(){
}
/**
*运行程序
*/
public void Run(){
//Init a project - and therefore a workspace
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.newProject();
Workspace workspace = pc.getCurrentWorkspace();
//Get controllers and models
ImportController importController = Lookup.getDefault().lookup(ImportController.class);
//Get models and controllers for this new workspace - will be useful later
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
//Import file
Container container,container2;
try {
File file_node = new File(getClass().getResource("./resources/Critical Power for Asymptotic Connectivity in Wireless Networks/Nodes.csv").toURI());
container = importController.importFile(file_node);
container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED); //Force DIRECTED
container.getLoader().setAllowAutoNode(false); //create missing nodes
container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
container.getLoader().setAutoScale(true);
File file_edge = new File(getClass().getResource("./resources/Critical Power for Asymptotic Connectivity in Wireless Networks/Edges.csv").toURI());
container2 = importController.importFile(file_edge);
container2.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED); //Force DIRECTED
container2.getLoader().setAllowAutoNode(false); //create missing nodes
container2.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
container2.getLoader().setAutoScale(true);
} catch (Exception ex) {
ex.printStackTrace();
return;
}
//Append imported data to GraphAPI
importController.process((org.gephi.io.importer.api.Container) container, new DefaultProcessor(), workspace);
importController.process((org.gephi.io.importer.api.Container) container2, new AppendProcessor(), workspace); //Use AppendProcessor to append to current workspace
//See if graph is well imported
DirectedGraph graph = graphModel.getDirectedGraph();
System.out.println("Nodes: " + graph.getNodeCount());
System.out.println("Edges: " + graph.getEdgeCount());
}
}
这里设置该程序读入一个csv文件,里面存储了网络中的节点和连边信息,如果以上程序运行正常的话,这里会输出节点数目与边的数目。
同时,我发现如果导入节点文件后再导入边文件,会导致最后统计的节点数目为原来的两倍,这里我也不知道为什么。可以尝试只导入边文件来将度为0的节点忽略掉,这样不会导致节点重复的。
总结
本篇博客简要介绍了Gephi软件的安装使用和一个小的demo示范,通过这个简单的demo,用户可以使用Java的api来调用Gephi进行可视化绘图,非常方便集成到自己的代码中,进行丰富的可视化展现。
参考
- 在NetBeans里使用Gephi-Toolkit来对网络进行分析,izhaoyi.top/2017/12/05/…
- How to code with the Toolkit,github.com/gephi/gephi…
- Javadoc,gephi 0.9.2 API