Вы не можете использовать свои данные в словаре, например {'A': {'B': '29'}, 'C': {'D': '26'}, 'C': {'B': '12'}}
, потому что ключи не уникальны (у вас есть C
два раза в качестве ключа). Вместо этого я предлагаю использовать 2D-список, где, например, 'A': {'B': '29'}
будет ['A', 'B', '29']
.
Я предполагаю, что ваш график неориентирован (край A-> B такой же, как B-> A), и что у вас не больше одного края между двумя узлами.
Вот мой пример с тремя ребрами, где я рисую узлы (и их имена) и ребра (и их веса). Я также преобразовал ваши веса в числовые значения, так как вы заявили, что будете выполнять вычисления на своем графике.
import networkx as nx
import matplotlib.pyplot as plt
data = [
['A', 'B', '29'],
['C', 'D', '26'],
['C', 'B', '12']
]
G = nx.Graph() # new empty undirected graph
for row in data:
src_node = row[0]
dest_node = row[1]
weight = float(row[2]) # convert weight to a number
G.add_edge(src_node, dest_node, weight=weight)
pos = nx.spring_layout(G) # compute graph layout
nx.draw(G, pos, node_size=700) # draw nodes and edges
nx.draw_networkx_labels(G, pos) # draw node labels/names
# draw edge weights
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
# show image
plt.show(G)
Выход:
Обратите внимание, что это может занять некоторое время для Python, чтобы нарисовать график, если у вас есть много узлов и ребер (изображение может быть загроможден). Стоит отметить, что с помощью функции макета spring_layout
вы можете получать разные изображения при каждом запуске кода.
Можете ли вы сузить это до одного вопроса и объяснить, что вы пробовали? – Joel
Как вы пытались создать график, и что пошло не так? Пожалуйста, предоставьте [mcve]. –
Вот мой код для чтения через CSV файл и сделать многоуровневый словарь my_dict = {} с открытым ('') final_graph.csv как f_input: для строки в csv.reader (f_input): my_dict [строка [0]] = {строка [1]: строка [2]} Я хочу преобразовать my_dict в видимый сетевой график со всеми узлами и ребрами –