2

次のように生成された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

したがって、以前の簡単な提案でさえ機能しません。

4

1 に答える 1

1

何をしようとしているのか、よくわからなかったのかもしれません。たとえば、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 の間です。

于 2016-07-04T11:44:05.880 に答える