次のように生成されたgraph_tool.Graphがあります。
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
したがって、以前の簡単な提案でさえ機能しません。