自动为Graphviz中的节点指定颜色

2024-06-09 22:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

用python和graph组成的聚类图绘制hvi图。 我想为节点指定不同的颜色(取决于每个节点的属性,例如x坐标)。在

这是我制作图形的方法

def add_nodes(graph, nodes):
    for n in nodes:
        if isinstance(n, tuple):
            graph.node(n[0], **n[1])
        else:
            graph.node(n)
    return graph

A = [[517, 1, [409], 10, 6], 
     [534, 1, [584], 10, 12], 
     [614, 1, [247], 11, 5], 
     [679, 1, [228], 13, 7], 
     [778, 1, [13], 14, 14]]

nodesgv = []

for node in A:
    nodesgv.append((str(node[0]),{'label': str(node[0]), 'color': ???, 'style': 'filled'}))

graph = functools.partial(gv.Graph, format='svg', engine='neato')
add_nodes(graph(), nodesgv).render(('img/test'))

现在我想用每个节点的第一个值的顺序为每个节点指定一个颜色。 更具体地说,我想要的是红色节点(517)、黄色节点(534)、绿色节点(614)、蓝色节点(679)和紫色节点(778)。在

enter image description here

我知道如何给图形指定颜色,但我要找的是类似于使用matplotlib时的c=x部分。 问题是我不能预先知道节点(集群)的数量,所以举个例子,如果我有7个节点,我仍然需要一个有7个节点的图,从红色节点开始,以紫色节点结束。在

^{pr2}$

那么graphviz中有没有属性可以做到这一点呢? 或者谁能告诉我matplotlib中的colormap是如何工作的??在

对不起,不清楚。T^T公司


Tags: inaddnode图形for属性节点matplotlib
1条回答
网友
1楼 · 发布于 2024-06-09 22:41:45

哦,我想办法得到我想要的。 只是为了录音和其他人可能有同样的问题(?) 只能重新缩放颜色贴图并将相应的索引(颜色)指定给节点。在

def add_nodes(graph, nodes):
for n in nodes:
    if isinstance(n, tuple):
        graph.node(n[0], **n[1])
    else:
        graph.node(n)
return graph

A = [[517, 1, [409], 10, 6], 
     [534, 1, [584], 10, 12], 
     [614, 1, [247], 11, 5], 
     [679, 1, [228], 13, 7], 
     [778, 1, [13], 14, 14]]

nodesgv = []
Arange = [ a[0] for a in A]
norm = mpl.colors.Normalize(vmin = min(Arange), vmax = max(Arange))
cmap = cm.jet

for index, i in enumerate(A):
    x = i[0]
    m = cm.ScalarMappable(norm = norm, cmap = cmap)
    mm = m.to_rgba(x)
    M = colorsys.rgb_to_hsv(mm[0], mm[1], mm[2])
    nodesgv.append((str(i[0]),{'label': str((i[1])), 'color': "%f, %f, %f" % (M[0], M[1], M[2]), 'style': 'filled'}))

graph = functools.partial(gv.Graph, format='svg', engine='neato')
add_nodes(graph(), nodesgv).render(('img/test'))

相关问题 更多 >