2014-01-16 62 views
1

我試圖繪製與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格式)。

你知道如何解決這個問題嗎?在此先感謝您的幫助!

回答

2

在撰寫本文時,用最新的穩定版本的igraph自定義邊緣排序是不可能的。 edge_order關鍵字參數最近已添加到開發版本,您可以檢查在GitHub repo of igraph中進行此項工作所需的更改。

如果您不想修補您的igraph副本,可以先嚐試繪製圖形,然後再次在上面繪製圖形,但是這次除了紅色邊緣之外的所有圖形都將變爲透明(將其顏色設置爲rgba(0,0,0,0))。這可以用類似的東西來完成:

fig = Plot(target="test.svg") 
fig.add(g, ...add every usual plot parameter here...) 
g.es["color"] = "rgba(0,0,0,0)" 
g.es[your_red_edge]["color"] = "red" 
fig.add(g, ...add plot parameters here again...) 
fig.save() 
+1

非常感謝Tamás,您的幫助總是非常感激。其實我嘗試了類似於你所說的,即畫圖兩次(我在igraph的網頁上跟着教程),但之後我有問題以svg格式保存。然而,似乎你的建議,即通過使用target =「test.svg」,問題應該得到解決。再次感謝! – user2983638