繁体   English   中英

如何使用顶点和边的分类属性在图形工具中绘制颜色?

[英]How to use categorial properties of Vertices and Edges to draw colors in graph-tool?

我有一个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

我不想不必设置自定义颜色图等,然后将这些属性名称映射到color,是否有一些简单的方法将分类值映射到颜色(例如,类似于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

因此,即使我以前的简单建议也行不通。

也许我不太了解您要做什么。 例如,如果您想设置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之间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM