#python #networkx #graph-layout #gml #cytoscape
#python #networkx #графический макет #gml #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. Я не уверен, как перенести график в формат, который может включать позиции.
Ответ №1:
Ваш 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')
Результат:
Комментарии:
1. 1 за подсказку. Итак, я смог прочитать в файле graphml в cytoscape. Как мне теперь закодировать позиции узлов в файле graphml?
2. Круто — я приведу вам пример добавления атрибутов node ‘graphics’ в GML, поскольку это более компактный формат, и вы, возможно, сможете перевести это в GraphML.
3. Просто хотел сказать СПАСИБО! Этот фрагмент кода объясняет как раз то немногое, что нужно для переноса моих графиков в cytoscape! Теперь я могу генерировать и визуализировать с интерактивными вероятностями полные метаболические карты.
4. Не могли бы вы, пожалуйста, сказать, какие версии python и networkx вы используете? У меня проблемы с записью в gml, потому что networkx не позволяет записывать словарь в качестве параметра (я имею в виду «графику»). И я обнаружил, что это обычная проблема для многих людей.
Ответ №2:
networkx
теперь есть функции для записи / чтения графиков в / из формата cytoscape JSON: https://networkx.github.io/documentation/stable/_modules/networkx/readwrite/json_graph/cytoscape.html
Комментарии:
1. Эта функция выполняет то же самое, что и ответ @samplebias выше, и выводит его в требуемом формате JSON, за исключением того, что она не допускает дополнительных атрибутов. В cytoscape требуются только поля name и Id
Ответ №3:
Просто дополнение для
nx.__version__
'2.3'
nx.set_node_attributes(G, {n: {'x': p[0], 'y': p[1]}}, 'graphics')
Позиция параметра неправильная…