Сгенерировать сетевой график из фрейма данных больших панд

#python #graph #networkx #graphviz

#python #График #networkx #graphviz

Вопрос:

Предположим, у меня есть этот df фрейм данных, который содержит 3794 строки x 2 столбца, где столбец a-number представляет узлы с направленными ребрами к узлам в b-number :

             a_number    b_number
0       0123456789343   0123456789991
1       0123456789343   0123456789633
2       0123456789343   0123456789633
3       0123456789343   0123456789628
4       0123456789343   0123456789633
... ... ...
3789    0123456789697   0123456789916
3790    0123456789697   0123456789886
3791    0123456789697   0123456789572
3792    0123456789697   0123456789884
3793    0123456789697   0123456789125
3794 rows × 2 columns
 

Дополнительная информация:

 len(df['a_number'].unique())
>>> 18

len(df['b_number'].unique())
>>>1145
 

Я пытаюсь сгенерировать графическое представление графика. Вот код для применения networkx:

 import networkx as nx
G = nx.DiGraph()

for  i, (x, y) in df.iterrows():
    G.add_node(x)
    G.add_node(y)
    G.add_edge(x,y)
    
nx.draw(G, with_labels = True, font_size=14 , node_size=2000)
 

Я получаю этот вывод:

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

У меня возникли некоторые проблемы с визуализацией графиков, созданных с помощью python-networkx, я хочу уменьшить беспорядок и регулировать расстояние между узлами. Пожалуйста, сообщите. Что я могу сделать с кодом? Спасибо.

Ответ №1:

Сначала, чтобы уменьшить беспорядок, я бы начал с уменьшения размера узла, возможно, до 200 или 400.

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

Если наличие меток на графике не является необходимым, удалите их, чтобы сделать его более чистым, передав with_labels=False функции рисования.

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

 pos = nx.spring_layout(G, k=0.8)
nx.draw(G, pos , with_labels = True, font_size=7, node_size=400)
 

Параметр k в макете spring позволяет регулировать расстояние между узлами. Вы можете попробовать разные значения, чтобы увидеть, что подходит вам больше всего.