2013-07-18 162 views
1

我正在寫整數分區的代碼,並構造一個圖形,其中每個節點是一個分區。我想用{2,1,1},{1,1,1,1},{2,2}等分區元素標記圖中的節點。如何將標籤添加到networkx圖形中的節點?

所以我想知道,如何在networkx中標記一個節點。

我已經看到標籤節點的代碼,但我沒有得到它。 的代碼如下:

nx.draw_networkx_nodes(G,pos, 
         nodelist=[0,1,2,3], 
         node_color='r', 
         node_size=500, 
        alpha=0.8) 

但我要的是標誌已經構成的曲線圖的各個節點!

我在這裏提供我的代碼,以便您可以更好地理解它。

import networkx as nx 
from matplotlib import pylab as pl 

def partitions(num): 
    final=[[num]] 

    for i in range(1,num): 
     a=num-i 
     res=partitions(i) 
     for ele in res: 
      if ele[0]<=a: 
       final.append([a]+ele) 

    return final 

def drawgraph(parlist): 
    #This is to draw the graph 
    G=nx.Graph() 
    length=len(parlist) 
    print "length is %s\n" % length 

    node_list=[] 

    for i in range(1,length+1): 
     node_list.append(i) 

    G.add_cycle(node_list) 

    nx.draw_circular(G) 
    pl.show() 

請幫助我。

非常感謝您

回答

5

由於您的node_list組成的整數,你的節點得到了那些整數作爲標籤的字符串表示。但是你的節點可以是任何可哈希對象,而不僅僅是整數。所以最簡單的做法是讓你的node_listparlist中的項目的字符串表示。 (在parlist的項目清單,這是可變的,因此不哈希的。這就是爲什麼我們不能只使用parlist作爲我們node_list。)

還有一個功能nx.relabel_nodes,我們可以轉而使用,但我認爲只要給節點正確的標籤就更簡單了。

import networkx as nx 
import matplotlib.pyplot as plt 


def partitions(num): 
    final = [[num]] 

    for i in range(1, num): 
     a = num - i 
     res = partitions(i) 
     for ele in res: 
      if ele[0] <= a: 
       final.append([a] + ele) 

    return final 


def drawgraph(parlist): 
    G = nx.Graph() 
    length = len(parlist) 
    print "length is %s\n" % length 
    node_list = [str(item) for item in parlist] 
    G.add_cycle(node_list) 
    pos = nx.circular_layout(G) 
    draw_lifted(G, pos) 


def draw_lifted(G, pos=None, offset=0.07, fontsize=16): 
    """Draw with lifted labels 
    http://networkx.lanl.gov/examples/advanced/heavy_metal_umlaut.html 
    """ 
    pos = nx.spring_layout(G) if pos is None else pos 
    nx.draw(G, pos, font_size=fontsize, with_labels=False) 
    for p in pos: # raise text positions 
     pos[p][1] += offset 
    nx.draw_networkx_labels(G, pos) 
    plt.show() 

drawgraph(partitions(4)) 

產生

enter image description here

+0

感謝您的答覆。我得到了答案,現在,我必須**瞭解你的代碼。但是在這裏,每個節點應該只有兩條邊,但在您的代碼中,每個節點都有多於兩條邊。我們能克服嗎?因爲它看起來像一個非常複雜的網絡。如果這是不可能的,沒問題。再次非常感謝! –

+0

請您告訴我更多的信息(如文檔,例子等)將在那裏容易理解這個主題,讓我去那裏搜索,而不是麻煩你嗎? –

+0

我知道的最佳資源是[官方文檔](http://networkx.lanl.gov)和[圖庫](http://networkx.github.com/documentation/latest/gallery.html) 。 – unutbu

相關問題