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.
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