2016-06-24 48 views
2

我有一個graph_tool.Graph產生如下:如何使用Vertices和Edges的分類屬性在圖形工具中繪製顏色?

import random 
import graph_tool.all as gt 

G = gt.Graph() 

# Add a categorical property 
cprop = G.new_vertex_property('string') 
G.vertex_properties['type'] = cprop 

# Add some verticies with alternating properties 
for idx in range(10): 
    v = G.add_vertex() 
    G.vp['type'][v] = 'even' if idx % 2 == 0 else 'odd' 

# Add some edges 
for idx in range(20): 
    src = random.randint(0,9) 
    dst = random.randint(0,9) 
    G.add_edge(G.vertex(src), G.vertex(dst)) 


gt.graph_draw(G, vertex_color=cprop) 

的(相當明顯)值誤差爲:

ValueError: to_rgba: Invalid rgba arg "even" 
to_rgb: Invalid rgb arg "even" 
could not convert string to float: even 

我不希望有設置自定義彩色地圖和像然後映射這些屬性名稱的顏色,是否有一些簡單的方法將分類值映射到顏色(例如類似於prop_to_size)?

更新

好了,遺憾的是,即使一個簡單的地圖不起作用。我想是這樣的:

cmap: {"even": "#9b59b6", "odd": "#3498db"} 
vcolor = G.vp['type'] 
vcolor.a = map(lambda c: cmap[c], vcolor.a) 

gt.grapgh_draw(G, vertex_color=vcolor) 

但是,新的錯誤是:

ValueError: Cannot get array for value type: string 

所以,即使我以前的簡單的建議是行不通的。

回答

0

也許我真的不明白你在做什麼。例如,如果您想設置RGB值來爲邊緣着色,您可以這樣做;

#Add a property map 
edge_color = G.new_edge_property('vector<double>') 
G.edge_properties['edge_color']=edge_color 

#Color your edges 
for e in G.edges(): 
    edge_color[e] = (r/255.0, g/255.0, b/255.0, alpha) 

其中R,G,B爲你的RGB值,在0.0和255.0和α之間是0.0和1.0

之間
+0

我有已經在它具有分類值的屬性;我希望這些分類值(甚至是連續分類)的顏色與它們在圖形工具中的大小相同。我想你說的是我自己手動設置每一種顏色? – bbengfort

相關問題