Переименование графика в Networkx - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в Python, и я пытаюсь изучить Networkx (https://networkx.github.io/)

Я пытаюсь запустить базовый c код:

import networkx as nx
import matplotlib.pyplot as plt

G=nx.Graph()

G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
G.add_node(5)
G.add_node(6)
G.add_node(7)

G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(3,4)
G.add_edge(4,5)
G.add_edge(5,6)
G.add_edge(6,7)
G.add_edge(7,1)

G.add_edge(1,3)
G.add_edge(1,4)
G.add_edge(1,5)
G.add_edge(1,6)
G.add_edge(1,7)

G.add_edge(2,4)
G.add_edge(2,5)
G.add_edge(2,6)
G.add_edge(2,7)

G.add_edge(3,5)
G.add_edge(3,6)
G.add_edge(3,7)

G.add_edge(4,6)
G.add_edge(4,7)

G.add_edge(5,7)

nx.draw(G)

plt.savefig("graph1.png")
plt.show()

, и это сгенерированный график:

enter image description here

The problem comes when trying to add names to the nodes. I am running the next code:

import networkx as nx
import matplotlib.pyplot as plt

G=nx.Graph()

G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
G.add_node(5)
G.add_node(6)
G.add_node(7)

G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(3,4)
G.add_edge(4,5)
G.add_edge(5,6)
G.add_edge(6,7)
G.add_edge(7,1)

G.add_edge(1,3)
G.add_edge(1,4)
G.add_edge(1,5)
G.add_edge(1,6)
G.add_edge(1,7)

G.add_edge(2,4)
G.add_edge(2,5)
G.add_edge(2,6)
G.add_edge(2,7)

G.add_edge(3,5)
G.add_edge(3,6)
G.add_edge(3,7)

G.add_edge(4,6)
G.add_edge(4,7)

G.add_edge(5,7)

names = {1:"Central",2:"South",3:"North",4:"East",5:"West",6:"Up",7:"Down"}
H=nx.relabel_nodes(G,names)

nx.draw(H)

plt.savefig("graph1.png")
plt.show()

and the resulted graph is this one:

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

Как добавить имена узлам? Я использую python 3.8 и Networkx 2.4

1 Ответ

1 голос
/ 20 июня 2020

Вы можете использовать nx.draw(H, with_labels=True) или nx.draw_networkx(H), для которого по умолчанию with_labels=True.

документация по nx.draw :

draw (G, pos = None, ax = None, ** kwds)

[...]

kwds (необязательные ключевые слова) - См. networkx.draw_networkx () для описания необязательные ключевые слова.

документация nx.draw_networkx

draw_networkx (G, pos = None, стрелки = True, with_labels = True, ** kwds)

[...]

with_labels (bool, необязательно (по умолчанию = True)) - установите значение True, чтобы рисовать метки на узлах.

изменить:

нарисовать края разными цветами:

проверить функцию nx.draw_networkx_edges

соответствующие атрибуты:

edge_color (color string, or array of floats) – Edge color. Can be a single color 
format string (default=’r’), or a sequence of colors with the same length as edgelist. If numeric values are specified they will be mapped to colors using the edge_cmap and edge_vmin,edge_vmax parameters.
style (string) – Edge line style (default=’solid’) (solid|dashed|dotted,dashdot)
alpha (float) – The edge transparency (default=1.0)
cmap (edge) – Colormap for mapping intensities of edges (default=None)
edge_vmin,edge_vmax (floats) – Minimum and maximum for edge colormap scaling (default=None)

Итак, вы можете составить список строк:

colors = ['red'] * len(G.edges()

pos = nx.spring(layout(G))
nx.draw_networkx_nodes(G, pos=pos)
nx.draw_networkx_edges(G, pos=pos, edge_color=colors)

или использовать числа и цветовую карту:

colors = [np.random.rand() for e in G.edges()]
pos = nx.spring(layout(G))
nx.draw_networkx_nodes(G, pos=pos)
nx.draw_networkx_edges(G, pos=pos, edge_color=colors, cmap='viridis')
...