igraph中的边缘叠加(Python)

时间:2014-01-16 15:40:25

标签: python igraph

我正在尝试使用Python上的igraph绘制图形,根据以下代码:

import numpy as np
import igraph as ig


def make_blue(brightness):
    brightness = round(255 * brightness)
    return [255 - brightness, 255 - brightness, 255]


N = 6


adj_matr = np.random.random((N, N))
weights = sum(adj_matr.tolist(), [])

g = ig.Graph.Weighted_Adjacency(adj_matr.tolist(), mode=ig.ADJ_DIRECTED, attr="weight", loops=True)

g.vs["color"] = "rgb(224,224,224)"
g.es["arrow_size"] = 0.7



for i in range(0, pow(N, 2)):

    rgb_color = make_blue(weights[i])
    color_string = "rgb(" + str(rgb_color[0]) + "," + str(rgb_color[1]) + "," + str(rgb_color[2]) + ")"
    g.es[i]["color"] = color_string


g.es[1]["color"] = "red" 

ig.plot(g, "My_Graph.svg", bbox=(700, 700), margin = 100, vertex_label=map(str, np.arange(N)))

结果如下所示:

enter image description here

enter image description here

我想在蓝色箭头上绘制红色箭头,因为它部分隐藏。 我试过用fig = Plot(); fig.add(g)之类的东西将红色箭头叠加在其他东西上,但后来我不知道如何将整个绘图保存到svg文件中(函数fig.save()似乎只保存到一个png格式)。

你知道如何解决这个问题吗?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在撰写本文时,使用最新的稳定版igraph还无法进行自定义边缘排序。 edge_order关键字参数最近已添加到开发版本中,您可以在GitHub repo of igraph中检查使其工作所需的更改。

如果您不想修补igraph的副本,可以先尝试绘制图形,然后再在上面绘制图形,但这次使红色边缘除了透明(将其颜色设置为{ {1}})。这可以通过以下方式完成:

rgba(0,0,0,0)
相关问题