为Igraph 0.6(Python)图形添加图例或背景图像

1 投票
1 回答
1482 浏览
提问于 2025-04-17 17:35

我用Python 2.7和Igraph 0.6(配合Cairo扩展)画图,效果都不错,但我想每次画图的时候都加一个图例。

如果能在图上加个背景图片也行,因为我可以做一张白色的图片,大小合适,里面已经加好图例(包括一些通用的说明)。

不过我现在都做不到,也在谷歌上找不到相关的信息。可能是我没有找到正确的搜索方式,或者在Igraph的文档中找不到合适的关键词。

gp = Graph()。这个是全局的,里面有顶点和边的序列等等。还有一些列表包含了关于顶点和边的更多信息(比如:self.gp_cities, self.road_kind)。这是我画图的方式:

def showitshort(self,event):
    global gp
    layout = gp.layout("kk")
    color_dict = {"1": "red", "20": "blue"}
    visual_style = {}
    visual_style["vertex_size"] = 15
    visual_style["vertex_color"] = ["yellow"]
    visual_style["edge_color"] = [color_dict[elektro] for elektro in self.road_kind]
    visual_style["vertex_label"] = self.gp_cities
    visual_style["layout"] = layout
    visual_style["bbox"] = (4000, 2500)
    visual_style["margin"] = 100
    visual_style["vertex_label_dist"] = 5
    visual_style["vertex_shape"] = "triangle-up"
    plot(gp,**visual_style)

我觉得只提供这个链接就够了。请帮帮我,非常感谢!

1 个回答

2

这里的窍门是,你可以把一个已经存在的Cairo表面传给plot,这样它就会在那个表面上画图,而不是新建一个表面。所以,基本上,你需要先创建一个Cairo表面(比如说,ImageSurface),然后用标准的Cairo方法在这个表面上画出你的图例,最后把这个表面传给plot,像这样:

plot(gp, target=my_surface, **visual_style)

据我所知,当你这样调用plot()时,它不会直接显示图形;它只是会返回一个Plot对象。你可以调用这个Plot对象的show()方法来显示图形,或者调用save()方法把它保存为PNG文件。

撰写回答