2015-04-16 2 views
0

Я делаю большой двудольный граф, я могу сделать график, но я не могу пометить узлы в графике, мне интересно просто маркировать узлы nodelistDept своими именами Я пробовал все, кроме ничего не работает, любая помощь будет очень признательна, вот код:Рисование этикеток в NetworkX График

pos=nx.networkx.spring_layout(G) 
#draw nodes 
nx.draw_networkx_nodes(G, pos, nodelist=nodelistDept,node_color = 'r', node_size = 400) 
nx.draw_networkx_nodes(G, pos, nodelist=nodelistSup,node_color= 'w', node_size=50) 
#draw edges 
nx.draw_networkx_edges(G,pos,width=0.5,alpha=0.5) 
nx.draw_networkx_edges(G,pos,edgelist=edgeList) 
#draw the labels 
#labels = nodelistDept 
#nx.draw_networkx_labels(G,pos) 

nx.draw_networkx_labels(G,pos, font_size=12,font_family='sans-serif') 
plt.show() 
+0

С этим легче работать, если вы дадите минимальный рабочий пример. Я бы хотел просто скопировать и вставить свой код и запустить его, но он не знает 'nx',' plt', 'nodelistDept',' nodelistSup', ... Поэтому он должен иметь все, что ему нужно для запуска , и вещи, которые не нужны, чтобы увидеть проблему, которую вы видите, должны быть удалены. – Joel

+0

Перечитывая свой вопрос: спрашиваете ли вы, как называть только подмножество узлов? Чтобы расширить мой предыдущий комментарий, очень полезно предоставить код, который запускается на машине, рассказать нам, что такое вывод, и что вы хотите получить. – Joel

ответ

0

Я думаю, что ошибка находится где-то в другом месте. Когда я бегу модифицированную версию кода следующим образом:

import networkx as nx 
import pylab as plt 

G=nx.fast_gnp_random_graph(15,0.1) 
pos = nx.spring_layout(G) 
nx.draw_networkx_nodes(G,pos) 
nx.draw_networkx_edges(G,pos) 
nx.draw_networkx_labels(G,pos) 

plt.savefig('labels.png') 

я

enter image description here

Так этикетки есть.


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

Если вы пытаетесь просто маркировать подмножество узлов:

subnodelist = [1,2,3,4,5,6,7,8] 
labels = {k:k for k in subnodelist}  
plt.clf() 
nx.draw_networkx_nodes(G,pos) 
nx.draw_networkx_edges(G,pos) 
nx.draw_networkx_labels(G,pos, labels) 
plt.savefig('labels2.png') 

Это дает

enter image description here

Что мне делать с labels= {k:k for k in subnodelist} это создать Dict с каждой метки узла шпонкой к его имя.

Что-то еще, что может объяснить проблему, заключается в использовании show.

Когда я запускаю plt.show() на моем macbook в ipython, он не может отображать метки, но это из-за некоторой проблемы с рендерингом - я получаю длинное сообщение об ошибке, которое я никогда не пытался разобраться. Когда я сохраню фигуру, все в порядке. Более подробно на ошибку здесь: pylab/networkx; no node labels displayed after update

+0

привет joel, большое спасибо за ваши предложения, я пытаюсь пометить все узлы, но я думаю, что происходит то, что метки не отображаются в сюжете, который я делаю с помощью plt.show(), но, возможно, они там, если я сохраню файл pic – dbmehri

+0

Ах - да. Я удалил это из более ранней версии моего ответа. Я верну его обратно. По крайней мере, с ipython на моем mac, если я использую plt.show, я получаю ошибку в renderring, но plt.savefig в порядке. – Joel

+0

Я пытался сделать то, что вы предлагали, но безрезультатно, все равно никаких ярлыков, я получаю ошибку «плохой аргумент для встроенной операции», вот мой код: labels = {k: k для k в nodelistDept} plt.clf() nx.draw_networkx_labels (G, pos, labels) plt.show() – dbmehri

2

Я не знаю, если это глупый ответ, но у пытался, например:

nx.draw_spectral(G, with_labels=True) ? 

Он работал для меня.

Смежные вопросы