Что-то вроде этого:
vertex_set = set(vertices_in_cycle)
g.es["color"] = "black"
red_edges = g.es.select(_source_in=vertex_set, _target_in=vertex_set)
red_edges["color"] = "red"
Пояснение:
g.es
представляет собой совокупность всех ребер в графе. (Аналогично, g.vs
- множество всех вершин).
g.es["color"]
позволяет присвоить значение атрибута всех ребер в графе color
. Этот атрибут edge используется плоттером для определения того, какой цвет должен иметь край. Поэтому в строке 2 вы устанавливаете цвет всех краев на черный. (Примечание: вы можете также использовать список здесь вместо простой строки или использовать цветные обозначения HTML для пользовательских цветов).
В качестве списка вы можете использовать g.es
, и в этом случае вы получите конкретный край графика; например, g.es[2]
даст вам край с id = 2. Это не используется здесь, но это хорошо знать.
g.es.select
- метод, который выбирает подмножество ребер на основе некоторых критериев. help(EdgeSeq.select)
дает вам больше информации об этом; дело в том, что в строке 3 вы выбираете все ребра, для которых обе конечные точки лежат в интересующем вас наборе вершин. Выбранные края сохраняются в переменной red_edges
, которая имеет тот же тип, что и g.es
(то есть EdgeSeq
) ,
В последней строке, вы настраиваете цвет всех краев в red_edges
к red
, перекрывая черный цвет, который вы установили в строке 2.
Обратите внимание, что приведенный выше код не будет красить только края цикла до красного, а также все аккорды цикла.
Update: если строка 3 в приведенном выше коде не работает для вас по какой-то причине, вы можете заменить строки 2 и 3 следующего содержания:
g.es["color"] = ["red" if (edge.source in vertex_set and \
edge.target in vertex_set) else "black" \
for edge in g.es]
, когда я попытался осуществить вышеупомянутую закодировать ошибка возникла AttributeError: объект 'Graph' не имеет атрибута 'source' – Fyre
Скорее всего, вы написали 'source_in' и' target_in' вместо '_source_in' и' _target_in' (обратите внимание на верхнее подчеркивание). Однако было бы информативным, если бы вы сказали мне, какая из приведенных выше команд дала вам эту ошибку. –
да я использовал ведущее подчеркивание, но я все равно получаю ту же ошибку – Fyre