Перенести макет из networkx в cytoscape

Я хочу использовать networkx для создания макета графика. Можно ли перенести этот макет в cytoscape и нарисовать его там? Я попытался просто написать график как

import networkx as nx
G = nx.Graph()
G.add_edge(0,1,weight=.1)
G.add_edge(2,1,weight=.2)
nx.write_gml(G,'g.gml')
nx.write_graphml(G,'g.xml')

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


person highBandWidth    schedule 29.04.2011    source источник


Ответы (3)


Ваш g.xml файл GraphML выглядит хорошо и загружается для меня в Cytoscape (у меня Mac). Вы установили подключаемый модуль graphmlreader?

Если нет, загрузите его и поместите в папку с плагинами, затем перезапустите Cytoscape и попробуйте снова загрузить g.xml сеть.

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

import networkx as nx

G = nx.Graph()
G.add_edge(0, 1, weight=0.1, label='edge', graphics={
    'width': 1.0, 'fill': '"#0000ff"', 'type': '"line"', 'Line': [],
    'source_arrow': 0, 'target_arrow': 0})
nx.set_node_attributes(G, 'graphics', {
    0: {'x': -85.0, 'y': -97.0, 'w': 20.0, 'h': 20.0,
        'type': '"ellipse"', 'fill': '"#889999"', 'outline': '"#666666"',
        'outline_width': 1.0},
    1: {'x': -16.0, 'y': -1.0, 'w': 40.0, 'h': 40.0,
        'type': '"ellipse"', 'fill': '"#ff9999"', 'outline': '"#666666"',
        'outline_width': 1.0}
    })
nx.set_node_attributes(G, 'label', {0: "0", 1: "1"})
nx.write_gml(G, 'network.gml')

Результат:

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

person samplebias    schedule 29.04.2011
comment
+1 за подсказку. Итак, я смог прочитать файл graphml в cytoscape. Как мне теперь закодировать позиции узлов в файле graphml? - person highBandWidth; 29.04.2011
comment
Круто - я дам вам пример добавления атрибутов узла 'graphics' в GML, поскольку это более компактный формат, и вы можете перевести его в GraphML. - person samplebias; 29.04.2011
comment
Просто хотел сказать СПАСИБО! Этот фрагмент кода объяснил лишь то немногое, что нужно для того, чтобы мои графики превратились в cytoscape! Теперь я могу создавать и визуализировать с помощью интерактивных вероятностей полные метаболические карты. - person Jasper; 02.02.2013
comment
Не могли бы вы сказать, какую версию python и networkx вы используете? У меня проблемы с записью в gml, потому что networkx не позволяет записывать словарь в качестве параметра (я имею в виду «графику»). И я обнаружил, что это обычная проблема для многих людей. - person Roman2452809; 02.11.2016

networkx теперь имеет функции для записи / чтения графиков в / из формата cytoscape JSON: https://networkx.github.io/documentation/stable/_modules/networkx/readwrite/json_graph/cytoscape.html

person Schobster    schedule 18.09.2020

Просто дополнение для

nx.__version__
'2.3'
nx.set_node_attributes(G,  {n: {'x': p[0], 'y': p[1]}}, 'graphics')

Положение параметра неправильное ...

person user1265067    schedule 16.12.2019