1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- """
- Ego graph.
- """
- __all__ = ["ego_graph"]
- import networkx as nx
- @nx._dispatch
- def ego_graph(G, n, radius=1, center=True, undirected=False, distance=None):
- """Returns induced subgraph of neighbors centered at node n within
- a given radius.
- Parameters
- ----------
- G : graph
- A NetworkX Graph or DiGraph
- n : node
- A single node
- radius : number, optional
- Include all neighbors of distance<=radius from n.
- center : bool, optional
- If False, do not include center node in graph
- undirected : bool, optional
- If True use both in- and out-neighbors of directed graphs.
- distance : key, optional
- Use specified edge data key as distance. For example, setting
- distance='weight' will use the edge weight to measure the
- distance from the node n.
- Notes
- -----
- For directed graphs D this produces the "out" neighborhood
- or successors. If you want the neighborhood of predecessors
- first reverse the graph with D.reverse(). If you want both
- directions use the keyword argument undirected=True.
- Node, edge, and graph attributes are copied to the returned subgraph.
- """
- if undirected:
- if distance is not None:
- sp, _ = nx.single_source_dijkstra(
- G.to_undirected(), n, cutoff=radius, weight=distance
- )
- else:
- sp = dict(
- nx.single_source_shortest_path_length(
- G.to_undirected(), n, cutoff=radius
- )
- )
- else:
- if distance is not None:
- sp, _ = nx.single_source_dijkstra(G, n, cutoff=radius, weight=distance)
- else:
- sp = dict(nx.single_source_shortest_path_length(G, n, cutoff=radius))
- H = G.subgraph(sp).copy()
- if not center:
- H.remove_node(n)
- return H
|