Gephi+Inkscape图论画图

Gephi+Inkscape图论画图

背景

老板说帮忙画几个图吧,类似下图的。然后发来了一堆 txt 文件,就像这样。好了怎么画呢。经过不断摸索,整理出一个自认为比较好的工作流程。好了不扯淡了,直接进入正题。需要用到的分别为python(一点点,修饰一下数据,使其符合Gephi的要求),Gephi(用来画图), Inkscape(修饰图片,输出eps文件)。


Python

这里我们主要只需要一点点字符串 split()相关的知识即可。考察给定的数据的格式,看看用的什么分隔符(space,tab),从左往右分好(split),还是从右往左分好(rsplit),还是需要结合。

例子:
上面的图片中的文件,有两部分组成,上边是点集,下边是边集。点集分出来id和label,再后面的数据丢弃。边集把对应的id分割出来。最后拼装成两个Gephi要求的csv格式。

name = "div-pub-avg-core"
f = open(name + ".txt", "r")
fnode = open(name + "-node.csv", "w")
fedge = open(name + "-edge.csv", "w")
fnode.write("Id,Label\n")
fedge.write("source,target,type\n")

x = f.readlines()
for xx in x:
    if (len(xx.split()) != 2):
        y = xx.split(' ', 1)[0]
        yy = xx.split(' ', 1)[1].rsplit(' ', 2)[0]
        fnode.write(y + "," + yy + "\n")
    else:
        y = xx.split()
        fedge.write(y[0] + "," + y[1] + ",undirected\n")
f.close()
fnode.close()
fedge.close()

Gephi

复杂网络分析的工具。我们要借助它来画图。关于数据的输入,Gephi提供了多种方法,这里我们只讲从csv导入。Gephi要求提供两个csv文件,分别描述Nodes和Edges(当然,只输入一个文件是可以的,不过只有节点,或者只有边而节点没有标签),格式要求如下:

第一行:表头,表示下面的数据的含义
第二行开始:数据内容

例如:

注意边表格一定
准备好了csv之后,直接导入即可。(文件-Import spreadsheet)分别导入Nodes和Edges。导入进去是一个随机的图形。随后我们用左边的变换,变成需要的样子,然后预览,选择缺省值直边,调整标签、线大小颜色等。如下图所示,还可以通过旋转变换把它搞正。

随后输出SVG文件,(文件-输出-SVG文件)。SVG是一种矢量格式,转换时不会失真,而且文字(标签)和图像是可以分离的,方便我们在Inkscape中处理。(例如做个下标什么的)

Inkscape

Inkscape是一个矢量绘图软件。论文里很多图都可以用它来画,就像我们这种图,只要你有足够的耐心,也可以用它画出来。只不过比较费时罢了。我们需要用Inkscape帮忙把SVG转换成EPS文件。因为Gephi不能直接导出EPS。(不过 PDFTeXify 也貌似可以直接支持SVG文件)。这种转换是矢量图之间直接的转换,不会失真。同时上一段也讲了,在这一步,我们也可以处理修饰一下图片,具体操作就跟PS一样,不多说了。弄完之后,直接另存为 EPS 图像即可。

你可能感兴趣的:(画图)