Я не вижу метки на диаграмме NetworkX

Это мой код в Python 2.7.9:

import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
nx.draw(socialNetworl, node_size = 800, node_color="cyan")
plt.show()

Но я не вижу метки узла. Есть ли строка кода, которую я забыл?


person GSandro_Strongs    schedule 02.03.2015    source источник
comment
возможный дубликат построение графа networkx с метками узлов, по умолчанию равному узлу имя   -  person Joel    schedule 03.03.2015


Ответы (2)


Просто добавьте with_labels=True в свой код.

import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
nx.draw(socialNetworl, node_size = 800, node_color="cyan", with_labels = True)
plt.show()

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

Если вы хотите изменить метки, создайте словарь с метками и передайте labels=theLabelDict в nx.draw:

import matplotlib.pyplot as plt
import networkx as nx
socialNetworl = nx.Graph()
socialNetworl.add_nodes_from([1,2,3,4,5,6])
socialNetworl.add_edges_from([(1,2),(1,3),(2,3),(2,5),(2,6)]) 
labels = {1:'King Arthur', 2:'Lancelot', 3:'shopkeeper', 4:'dead parrot', 5:'Brian', 6:'Sir Robin'}
nx.draw(socialNetworl, node_size = 800, node_color="cyan", labels=labels, with_labels = True)
plt.show()

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

person Joel    schedule 03.03.2015
comment
У меня проблема. В моем случае я получаю имена из базы данных, ошибка возникает, когда есть имя, содержащее букву С, например фамилия BOLAÑOS, я использовал # -- coding: utf8 - - но недостаточно. Я читал, что для matplotlib нужен файл, который должен содержать специальные символы. Заранее спасибо. - person GSandro_Strongs; 04.03.2015

Вы можете рисовать метки узлов отдельно с помощью nx.draw_networkx_labels (а также контролировать множество других параметров ярлыков). Например, после добавления узлов и ребер вы можете написать:

pos=nx.spring_layout(socialNetworl)
nx.draw(socialNetworl, pos=pos, node_size = 800, node_color="cyan")
nx.draw_networkx_labels(socialNetworl, pos=pos);
plt.show()

Что рисует:

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

person Alex Riley    schedule 02.03.2015
comment
Я делаю диаграмму социальной сети, я пытался изменить метку номеров на метки имен, но получил ошибки. Можно ли изменить номера на имена и фамилии? например 5 Фреду Кеннеди? - person GSandro_Strongs; 03.03.2015
comment
@ajcr Вы можете упростить свой код. Нет необходимости в вызове nx.draw_networkx_labels. Просто сделайте nx.draw и передайте with_labels=True - person Joel; 03.03.2015
comment
@gs_developer_user3605534 Мой ответ на stackoverflow.com/questions/28533111/, дает возможность изменить отображаемую метку. Обратите внимание, что вы можете сделать все это только в nx.draw, а не добавлять nx.draw_networkx_labels - person Joel; 03.03.2015
comment
Спасибо @Joel - с некоторыми недавними работами я привык разделять их и рисовать метки отдельно с помощью draw_networkx_labels. В таких случаях, как ОП, я бы определенно выбрал ваш ответ. - person Alex Riley; 03.03.2015
comment
Я бы задал другой вопрос: на моей диаграмме 600 узлов, но когда оказывается, что узлы слишком соединены, как я могу показать меньше соединений? - person GSandro_Strongs; 03.03.2015