Назначение двух отдельных цветов для списка узлов в графике

#python #networkx #graph-theory

#python #networkx #теория графов

Вопрос:

Я хотел бы показать график, который содержит два разных цвета для каждого набора узлов, который у меня есть.

Я попытался определить функцию для присвоения каждого цвета узла узлу в списке, однако python, похоже, не распознает ни один из моих списков и поэтому в конечном итоге печатает все мои узлы в одном цвете. Я чувствую, что мне не хватает чего-то очень простого, но я просто не вижу этого.

Редактировать: Nodelist1 — это, по сути, последовательность узлов, которые представляют путь между двумя узлами. Все числа в Nodelist1 находятся в Graph.nodes()

 Nodelist1=[1,2,7,9,13] 
def nodecolor():
    for n in Graph.nodes():
        if n in list(NodeList1):
            node_color='red'
        else:
            node_color='blue'
    return node_color

nx.draw_networkx(Graph, node_color=nodecolor(), edge_color='red' )

  

В идеале это должно нарисовать график, который показывает два разных цвета. Однако он показывает только синий цвет.

Комментарии:

1. Можете ли вы также включить определение или присвоение NodeList1 ?

2. @ilim Я отредактировал вопрос, надеюсь, это поможет!

Ответ №1:

Похоже, вы присваиваете node_color переменной одну строку, в отличие, например, от списка. Поскольку nodecolor() функция возвращает единственную строку, draw_networkx получает единственный цвет для рисования графика.

Если вы просмотрите документацию здесь, вы можете увидеть, что вы можете передать последовательность строк в node_color параметр draw_networkx , хотя длина последовательности должна быть равна списку узлов.

Хотя я не разбираюсь в конкретной библиотеке, которую вы используете, я полагаю, что простая модификация вашей функции nodecolor() , приведенная ниже, сработала бы.

 def nodecolor():
    node_colors = []
    for n in Graph.nodes():
        if n in list(NodeList1):
            node_colors.append('red')
        else:
            node_colors.append('blue')
    return node_colors
  

Комментарии:

1. Привет, спасибо за ответ, я действительно посмотрел на это, прежде чем публиковать вопрос. Я понял ту часть, что последовательность цветов должна совпадать со списком узлов. Созданная мной функция была предназначена для этого, однако я все еще новичок в python, поэтому на самом деле не понимал, было ли то, что я писал, тем, что я хотел. Возможно, небольшое изменение функции на «для n в диапазоне(len(Graph.nodes()))». Сработает ли это?

2. @ViB Вы пробовали пример кода, который я опубликовал как часть моего ответа?

3. Извините, когда я впервые прочитал ваш ответ, я даже не видел вашего примера кода. Это работает именно так, как я хотел! Спасибо!