Как установить максимальное значение в цветовой карте сети (Python) - PullRequest
0 голосов
/ 12 июля 2020

Представьте, что у вас есть сеть из 10 узлов , а значение узлов values = [i for i in range(len(10))]

Теперь я хочу раскрасить эту сеть, но Мне нужна только цветная карта узлы со значением меньше 5 . Как мне это сделать?

Заранее благодарю

1 Ответ

1 голос
/ 13 июля 2020

Для этого вы можете просто не включать (отфильтровать) те узлы, которых вы хотите избежать при построении в nx.draw. Если вы действительно хотите включить их, хотя и без цветовой карты (возможно, постоянного цвета), просто используйте постоянный цвет, а не удаляйте эти узлы. Вот пример использования случайного графа:

import networkx as nx
import matplotlib as mpl
from matplotlib import pyplot as plt

G = nx.barabasi_albert_graph(10, 1)
# defines a colormap lookup table 
nodes = sorted(list(G.nodes()))
low, *_, high = sorted(values)
norm = mpl.colors.Normalize(vmin=low, vmax=high, clip=True)
mapper = mpl.cm.ScalarMappable(norm=norm, cmap=mpl.cm.coolwarm)

Чтобы включить все узлы, но иметь эти <5 без какой-либо цветовой карты:

plt.subplots(figsize=(10,6))
nx.draw(G, 
        nodelist=values,
        node_size=500,
        node_color=[mapper.to_rgba(i) if i>5 else 'lightblue' 
                    for i in values], 
        with_labels=True)
plt.show()

enter image description here

To directly remove them:

plt.subplots(figsize=(10,6))

pos = nx.spring_layout(G)
nx.draw_networkx_edges(G, pos=pos)
nx.draw_networkx_nodes(G, pos=pos,
                       nodelist=[i for i in values if i>5],
                       node_color=[mapper.to_rgba(i) 
                            for i in nodes if i>5])
nx.draw_networkx_labels(G, pos=pos,
                       labels={node:node for node in nodes if node>5})

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...