Указанные граничные длины на networkx/igraph (Python)

Я хотел визуализировать сеть с данными, которые я имею и хотел бы изобразить их в виде графика с определенными граничными длинами. Я использую Python, и я попробовал networkx и igraph для графического изображения, но все, кажется, присваивают зафиксированные граничные длины.

a.) Интересно, сделал ли я коды неправильно, или пакеты не действительно способны. Как Вы правильно реализуете указанные граничные длины для networkx или igraph?

b.) Если networkx и igraph не могут сделать этого, какой пакет Вы могли возможно предложить? (Предпочтительно тот, который может перенести 80 тысяч узлов.)

Спасибо!

8
задан doug 22 January 2010 в 22:39
поделиться

1 ответ

This should work:

import networkx as NX
import pygraphviz as PG

G = PG.AGraph()
nlist = "A B C D E".split()
a, b = "A A B", "B C D"
elist = zip(a.split(), b.split())

G.add_nodes_from(nlist)
G.add_edges_from(elist)
G.node_attr.update(color="red", style="filled")
G.edge_attr.update(color="blue", len="2.0", width="2.0")

print(G.edge_attr)
# returns {'color': 'red', 'width': '', 'len': '2.0'}

# add new edge with custom length (all others have length=2.0):
G.add_edge("C", "E", len="3.0", color="blue", width="2.0")

edge = G.get_edge("C", "E")
print(edge_attr)
# returns {'color': 'blue', 'width': '2.0', 'len': '3.0'}

# and you can confirm that introspection by drawing & printing this graph:
G.draw('somefolderandfilename.png', format='png', prog='neato')

Most graph drawing algorithms use some version of SMACOF, which of course varies the edge length; however, the graphviz layout engine 'neato' (supplied as the 2nd argument to 'draw' above) ought to preserve, if at all possible, user-set edge lengths.

The library i used here is certainly sturdy enough to handle 80,000 nodes.

7
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: