#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 позволяет регулировать расстояние между узлами. Вы можете попробовать разные значения, чтобы увидеть, что подходит вам больше всего.