我有一个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
所以即使我之前的简单建议也行不通。
答案 0 :(得分: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之间,alpha介于0.0和1.0之间