#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. Извините, когда я впервые прочитал ваш ответ, я даже не видел вашего примера кода. Это работает именно так, как я хотел! Спасибо!