2016-06-24 4 views
2

Ich habe ein graph_tool.Graph wie folgt generiert:Wie kategoriale Eigenschaften von Vertices und Edges verwenden, um Farben in Graph-Tool zu zeichnen?

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) 

Die (ziemlich offensichtlich) Wert Fehler ist:

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

Ich würde es vorziehen, nicht benutzerdefinierte Farbkarten zu haben einzurichten und die wie und dann diese Eigenschaft Namen auf Farbe zuordnen, gibt es eine einfache Möglichkeit, kategorische Werte zu Farben zuordnen (z. B. ähnlich wie prop_to_size)?

aktualisieren

Nun, leider auch eine einfache Karte funktioniert nicht. Ich habe versucht, so etwas wie diese:

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) 

Aber der neue Fehler ist:

ValueError: Cannot get array for value type: string 

So auch mein früherer einfacher Vorschlag nicht funktioniert.

Antwort

0

Vielleicht habe ich nicht wirklich verstanden, was Sie versuchten zu tun. Wenn Sie beispielsweise RGB-Werte für die Kantenfarbe festlegen möchten, können Sie Folgendes tun:

#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) 

Wo r, g, b Ihre RGB-Werte zwischen 0,0 und 255,0 und Alpha ist zwischen 0,0 und 1,0

+0

ich eine Eigenschaft, die bereits kategorische Werte in sich hat; Ich würde mir wünschen, dass diese kategorischen Werte (oder sogar kontinuierliche) genauso eingefärbt werden wie im Diagrammwerkzeug. Ich denke, was Sie sagen, ist, dass ich manuell jede einzelne Farbe selbst einstellen muss? – bbengfort