У меня есть 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
)?
Update
Ну, к сожалению, даже простая карта не работает. Я пытался что-то вроде этого:
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
Так что даже мое ранее простое предложение не работает.
У меня есть свойство, которое уже имеет категориальные значения в нем; Я бы хотел, чтобы эти категориальные значения (или даже непрерывные) были окрашены таким же образом, как и размеры в графическом инструменте. Я предполагаю, что вы говорите, что мне приходится вручную устанавливать каждый отдельный цвет? – bbengfort