On 05/05/2014 07:21 AM, sandrine ollinger wrote:
I've asked to graph-tool the motifs of this graph, with the following instruction:
motifs, counts, vertex_maps = gt.clustering.motifs(gt.GraphView(rlf, directed=False), 4, return_maps=True)
So far, so good. This instruction returned me 3 variables. The first one is a list of graphs (motifs), the second one a list of numbers of counts, but the third is a bit mysterious for me.
So, it's a list of list of Property maps and it's ok that every one of this map correspond with a count of motif. However, I expected that this property maps refer to my original graph, but it does not.
That's right, the property map points to the graph you passed to the function, which is the graph view gt.GraphView(rlf, directed=False), *not* the original graph rlf. (note that this is not a problem, you can use these maps with the original graph)
The first PropertyMap object refer to the motif and not to my original graph. And here, I don't understand. For a motif which occurs 10 times in my graph, I obtain 10 property maps. If I use get_graph on this 10 maps, I obtain 10 identical graphs. What would be the value of returning the maps? I had hoped to obtain sub-graph with original vertex and edges properties.
This is useful for knowing where in the graph the motifs have occurred.
Is it something that I didn't understand? Is it possible to obtain sub-graph with original vertex and edges properties by using clustering.motifs?
Yes, you can get a subgraph of the original graph by constructing a GraphView and filtering out the nodes which do not belong to the motif: mask = g.new_vertex_property("bool") m = motifs[0] vmap = vertex_maps[0] for v in m.vertices(): mask[g.vertex(vmap[v])] = True m_g = GraphView(rlf, vfilt=mask) # the edge and vertex properties of m_g will correspond to those of g Best, Tiago -- Tiago de Paula Peixoto <tiago@skewed.de>