在igraph的挽救剧情作为eps格式

时间:2014-07-22 04:06:48

标签: python matplotlib igraph

将图表保存为eps格式。

我需要在igraph中保存图形作为图像,但是eps格式。

我有这个:

def _plot(g, membership=None):
    visual_style = {}
    visual_style["vertex_size"] = 24
    visual_style["layout"] = g.layout("kk")
    visual_style["bbox"] = (400, 300)
    visual_style["margin"] = 20
    for vertex in g.vs():
        vertex["label"] = vertex.index + 1
    if membership is not None:
        for vertex in g.vs():
            if(membership[vertex.index] == 0):
                vertex["color"] = "gray"
            else:
                vertex["color"] = "white"
            if(membership[vertex.index] == 0):
                vertex["shape"] = "circle"
            else:
                vertex["shape"] = "rectangle"
        visual_style["vertex_color"] = g.vs["color"]
        visual_style["vertex_shape"] = g.vs["shape"]
    visual_style["vertex_label_color"] = "black"
    visual_style["vertex_label_dist"] = -0.4
    igraph.plot(g, **visual_style)

if __name__ == "__main__":
    g = igraph.Nexus.get("karate")
    cl = g.community_fastgreedy()
    membership = cl.as_clustering(2).membership
    _plot(g, membership)

我试试这个:

(1)
igraph.plot(g,'graph.eps',**visual_style)

(2)
import matplotlib.pyplot as plt
igraph.plot(g,'graph.eps',**visual_style)
plt.savefig('graph.eps', format='eps', dpi=1000)

但是(1)和(2)不起作用,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,igraph的{​​{1}}仅支持PDF,PNG,SVG和PS。这就是你的方法#1失败的原因。

根据您的方法#2,没有任何内容可以将plot图形绘制到igraph绘图区域。但是,可以将matplotlib图形绘制到由igraph创建的Cairo SVG画布上(渲染器上下文需要作为matplotlib的参数给出。)

这里概述了后一种技巧:https://lists.nongnu.org/archive/html/igraph-help/2010-06/msg00098.html

所以,这可能不是很简单。另一个问题是,如果你可以避免使用EPS,通常可以使用现代工具。

答案 1 :(得分:1)

EPS与PS没有太大差别;基本上,EPS(封装的PostScript)文件只是PS文件,有一些额外的限制。一个这样的限制是EPS文件必须包含指定图形“边界”的BoundingBox DSC注释。您通常可以使用适当的转换器将PS文件转换为EPS文件,该转换器“推断”边界并将附加注释放入文件中。所以,我首先尝试绘制PS,然后使用ps2eps将其转换为EPS。另一种方法是生成SVG绘图,然后请求SVG感知工具(例如Inkscape)将其转换为EPS。 Inkscape甚至还有命令行参数,允许您在批处理脚本中执行此操作。