2015-07-21 2 views
0
  1. Привет, я довольно новичок в сетях, и я пытаюсь запрограммировать код, который получает все файлы .edges и .nodes из папки и генерирует графический файл, чтобы я мог визуализировать его в другом программном обеспечении. Но мне также нужно добавить некоторые цвета в мои узлы, но когда я попробовал это, я получил: KeyError 29
  2. Я выполнял цикл через мой массив узлов, чтобы добавить цвет каждого узла.
  3. Вот часть кода, где я пытаюсь добавить атрибут цвета. Таким образом, узлы будут окрашены в 4 разных цвета: лучший фитнес, тем хуже, лучший 10% лучший фитнес и 10% хуже.Как экспортировать сеть и атрибуты в graphml с помощью networkx?

    for i in range(len(nodes)): 
        if nodes[i]==top: 
        NetGraph.node[i]['color']='r' 
    
  4. Надеюсь, вы можете мне помочь! Приветствия

+0

Было ли это разрешено? Вы нашли ответ полезным? –

ответ

2

Если вы пытаетесь «сливать» данные отношения, которые хранятся в ряде файлов различных .nodes' and .edges' в одном графике, то вполне возможно, что, как файлы считываются с диска вы пришли через узел, который еще не добавлен в график.

В целом, я считаю, что для получения более значимого ответа на этот вопрос требуется дополнительная информация. Например: каков формат файлов .node и .edge? Что находится в переменной top? (Это список или одна числовая переменная, представляющая порог?).

Однако, основываясь на том, что упоминается до сих пор в этом вопросе, вот несколько советов:

  1. Попробуйте сначала построить график и цвет его позже. Это может показаться незначительным, если у вас уже есть данные о пригодности, но это будет самый простой способ заставить вас работать с частью кода.

  2. Убедитесь, что идентификаторы узлов действительно являются целыми числами. То есть каждый узел известен на графике по его значению индекса. Например, 2,3,5 и т. Д. Вместо «Париж», «Лондон», «Берлин» и т. Д. (Т. Е. Идентификаторы строковых узлов). Если это последний, тогда лучше будет сформироваться как: for aNode in G.nodes(data = True):. Это вернет итератор с идентификатором каждого узла и словарем со всеми данными существующего узла.

  3. Если top является одной переменной, то это не имеет смысла сравнивать идентификатор узла с top порога. Это было бы похоже на то, что если 22 (который является идентификатором узла) равен 89 (это некоторое выражение эффективности), то примените красный цвет к узлу. Если top - это список, содержащий все узлы, которые считаются вершинами узлов, тогда выражение условия должно быть: if nodes[i] in top:.

    1. Вы, кажется, пропустили отступ ниже if (?). Для оператора, который присваивает цвет узлу при условии, что условие True, для работы ему нужно отступом еще один набор из 4 пробелов справа.

    2. Выражение для присвоения цвета является правильным.

    3. Обратите внимание: Networkx попытается записать каждый атрибут узла и края, который попадает на график в соответствующий формат. Для получения дополнительной информации об этом см. Ответ на этот вопрос. Поэтому, как только вы удовлетворены структурой данного графа (G), вы можете просто вызвать networkx.write_graphml(G, 'mygraph.gml'), чтобы сохранить его на диске (где networkx - это имя модуля). Функции networkx.write_* будут экспортировать полную версию вашего графика (G) в несколько разных форматов или повысить исключение, если тип данных не может быть сериализован правильно.

Я надеюсь, что это помогает. С удовольствием отменяем ответ, если позже будут предоставлены более подробные сведения.

Смежные вопросы