将颜色应用于特定节点网络x

Nat*_*ate 4 python matplotlib networkx

我想通过节点属性的值为图中的节点着色,并且对于属性的特定值,我想应用渐变。这与我所看到的(许多!)其他响应不同,这些响应旨在为图中所有节点的matplotlibcmap(例如cmap = plt.get_cmap('Greens'))中的节点添加颜色。我想将一种颜色应用于一种类型的节点,并将颜色映射应用于另一种类型的节点。

这是我迄今为止尝试过的。我认为这是失败,因为我想添加一个字符串(如“黄”)和RGBA值(例如cmap(dict_1[node]))来color_map,然后我使用的node_color参数nx.draw()

import networkx as nx
import matplotlib.pyplot as plt

color_map = []
cmap = plt.get_cmap('Greens')

for node in g:
    if node in list_1:
        color_map.append('yellow')
    elif node in list_2:
        rgba = cmap(dict_1[node])
        color_map.append(rgba*-1)

nx.draw(g, node_color = color_map, node_size = 75)
Run Code Online (Sandbox Code Playgroud)

color_map当我只按名称向 中添加颜色color_map,而不是在当前表单中时,该方法工作得很好。

Nat*_*ate 6

嗯,我找到了解决方案。

我在这里这里这里找到了帮助。

我更改了 elif 语句以使用我修改的新函数:convert_to_hex,并将输出放入 color_map - 它按预期工作。

def convert_to_hex(rgba_color) :
    red = int(rgba_color[0]*255)
    green = int(rgba_color[1]*255)
    blue = int(rgba_color[2]*255)
    return '#%02x%02x%02x' % (red, green, blue)

import networkx as nx
import matplotlib.pyplot as plt

color_map = []
cmap = plt.get_cmap('Greens')

for node in g:
    if node in list_1:
        color_map.append('yellow')
    elif node in list_2:
        rgba = cmap(dict_1[node])
        color_map.append(convert_to_hex(rgba))


nx.draw(g, node_color = color_map, node_size = 75)
Run Code Online (Sandbox Code Playgroud)