2017-03-16 20 views
0

我有20朝向GRAP工具的曲線圖(Python的3.4),所有具有相同的節點名稱(它是一個屬性,稱爲「名稱」),但在連接方面變化和屬性。如何使用圖形工具我想象時空網絡?

我試圖跨越時間繪製這些網絡(即邊緣在每一個時間步如何改變,以及屬性,如顏色如何變化)。對於這一點,我需要修復的所有地塊的節點的位置。

我嘗試這樣做:

import graph_tool.all as gt 

## networks = {dictionary of time as the key and the Graph as the value} 

#getting the positions of the nodes once that should be fixed across Graphs 
initial_pos = gt.arf_layout(networks[0],weight=None, d=0.5, 
        a=10, dt=0.001, epsilon=1e-06, max_iter=100, pos=None, dim=2) 

for round_id in range(0,20): 
    G = networks[round_id] 
    fixed_pos = gt.arf_layout(G, max_iter=0, pos=initial_pos) 
    deg = G.degree_property_map("in") 
    deg.a = 15 * deg.a + 25 
    gt.graph_draw(
     G, 
     #pos=fixed_pos, 
     vertex_fill_color=G.vertex_properties["color"], 
     vertex_font_size=18, 
     vertex_size = deg, 
     vertex_shape = G.vertex_properties["shape"], 
     edge_pen_width = 5, 
     output_size=(1000, 1000), 
     output=("{0}.pdf".format(round_id)) 
    ) 

,但是這給了我以下錯誤:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-68-4efd39b32b83> in <module>() 
     5  #f, ax = plt.subplots(nrows=1, ncols=1, figsize=(17, 10), sharex=True) 
     6  G = nx2gt(networks[round_id]) 
----> 7  fixed_pos = gt.arf_layout(G, max_iter=0, pos=initial_pos) 
     8  deg = G.degree_property_map("in") 
     9  deg.a = 15 * deg.a + 25 

/Users/amaatouq/anaconda/lib/python3.4/site-packages/graph_tool/draw/__init__.py in arf_layout(g, weight, d, a, dt, epsilon, max_iter, pos, dim) 
    393 
    394  ug = GraphView(g, directed=False) 
--> 395  libgraph_tool_layout.arf_layout(ug._Graph__graph, _prop("v", g, pos), 
    396          _prop("e", g, weight), d, a, dt, max_iter, 
    397          epsilon, dim) 

/Users/amaatouq/anaconda/lib/python3.4/site-packages/graph_tool/__init__.py in _prop(t, g, prop) 
    177   raise ValueError("Expected '%s' property map, got '%s'" % 
    178       (names[t], names[prop.key_type()])) 
--> 179  return pmap._get_any() 
    180 
    181 

/Users/amaatouq/anaconda/lib/python3.4/site-packages/graph_tool/__init__.py in _get_any(self) 
    389   g = self.get_graph() 
    390   if t == "v": 
--> 391    N = g.num_vertices(True) 
    392   elif t == "e": 
    393    N = g.edge_index_range 

AttributeError: 'NoneType' object has no attribute 'num_vertices' 

回答

0

似乎是在arf_layout一個bug()。通過製作:

initial_pos = networks[0].own_property(initial_pos) 

之後再使用它。