Воспроизвести тот же график в NetworkX - PullRequest
2 голосов
/ 28 мая 2020

Я бы хотел улучшить свой график. Существуют следующие проблемы:

  1. как создать согласованный график. Сам график не согласован каждый раз, когда я выполняю / запускаю код, он будет генерировать разные изображения. Непоследовательный график отображается в URL.

enter image description here

как настроить размер всего графика / изображения и увеличить его как установить постоянное положение для объекта 'a', чтобы он постоянно появлялся в первой / верхней позиции как настроить длину стрелки для каждого отношения.

Спасибо, если кто-нибудь может дать какие-то примечания или советы

Это мои коды:

Unique_liss= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']

edgesList= [('a', 'b'), ('b', 'c '), ('c ', 'd'), ('d', 'e'), ('d', 'f'), ('e', 'g'), ('f', 'g'), ('g', 'h'), ('h', 'i '), ('i ', 'j'), ('j', 'k'), ('j', 'l'), ('k', 'm'), ('l', 'm')]

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(Unique_liss)
g.add_edges_from(edgesList)
nx.to_pandas_adjacency(g)

G = nx.DiGraph()
for node in edgesList:
    G.add_edge(*node,sep=',')

A = nx.adjacency_matrix(G).A

nx.draw(G, with_labels=True, node_size = 2000,
        node_color = 'skyblue')

1 Ответ

1 голос
/ 28 мая 2020

Чтобы иметь детерминированные макеты c узлов, вы можете использовать один из макетов NetworkX, который позволяет вам указать seed. Вот пример использования nx.spring_layout для приведенного выше графика:

from matplotlib import pyplot as plt

seed = 31
pos = nx.spring_layout(G, seed=seed)
plt.figure(figsize=(10,6))
nx.draw(G, pos=pos, with_labels=True, node_size = 1500,
        seed=seed, node_color = 'skyblue')

enter image description here

Вы получите точно такой же макет если вы повторно запустите вышеуказанное.

Чтобы настроить размер графика, у вас есть несколько вариантов. Самый простой вариант - установить размер фигурки plt.figure(figsize=(x,y)), как указано выше. И вы также можете контролировать размер графика на рисунке, используя параметр scale в nx.spring_layout.

В соответствии с последней точкой, похоже, вы не можете установить определенные c размеры стрелок для каждого край. Из [docs] (размер стрелки: int, необязательно (по умолчанию = 10)) у вас есть:

размер стрелки: int, необязательно (по умолчанию = 10)

Таким образом, вы можете установить это значение только на int, что приведет к одинаковому размеру для всех краевых стрелок.

...