【问题标题】:How to use categorial properties of Vertices and Edges to draw colors in graph-tool?如何使用顶点和边的分类属性在图形工具中绘制颜色?
【发布时间】:2016-10-27 11:36:53
【问题描述】:

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

所以即使我之前的简单建议也行不通。

【问题讨论】:

    标签: python graph graph-tool


    【解决方案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 之间,而 alpha 介于 0.0 和 1.0 之间

    【讨论】:

    • 我有一个已经包含分类值的属性;我希望这些分类值(甚至连续值)的颜色与它们在图形工具中的大小相同。我猜你的意思是我必须自己手动设置每种颜色?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多