networkx.geographical_threshold_graph

networkx.geographical_threshold_graph(n, theta, alpha=2, dim=2, pos=None, weight=None, metric=None)[source]

Returns a geographical threshold graph.

The geographical threshold graph model places n nodes uniformly at random in a rectangular domain. Each node u is assigned a weight \(w_u\). Two nodes u and v are joined by an edge if

\[w_u + w_v \ge \theta r^{\alpha}\]

where r is the distance between u and v, and \(\theta\), \(\alpha\) are parameters.

Parameters:

n : int or iterable

Number of nodes or iterable of nodes

theta: float

Threshold value

alpha: float, optional

Exponent of distance function

dim : int, optional

Dimension of graph

pos : dict

Node positions as a dictionary of tuples keyed by node.

weight : dict

Node weights as a dictionary of numbers keyed by node.

metric : function

A metric on vectors of numbers (represented as lists or tuples). This must be a function that accepts two lists (or tuples) as input and yields a number as output. The function must also satisfy the four requirements of a metric. Specifically, if d is the function and x, y, and z are vectors in the graph, then d must satisfy

  1. d*(*x, y) ≥ 0,
  2. d*(*x, y) = 0 if and only if x = y,
  3. d*(*x, y) = d*(*y, x),
  4. d*(*x, z) ≤ d*(*x, y) + d*(*y, z).

If this argument is not specified, the Euclidean distance metric is used.

Returns:

Graph

A random geographic threshold graph, undirected and without self-loops.

Each node has a node attribute 'pos' that stores the position of that node in Euclidean space as provided by the pos keyword argument or, if pos was not provided, as generated by this function. Similarly, each node has a node attribute 'weight' that stores the weight of that node as provided or as generated.

Notes

If weights are not specified they are assigned to nodes by drawing randomly from the exponential distribution with rate parameter \(\lambda=1\). To specify weights from a different distribution, use the weight keyword argument:

>>> import random
>>> n = 20
>>> w = {i: random.expovariate(5.0) for i in range(n)}
>>> G = nx.geographical_threshold_graph(20, 50, weight=w)

If node positions are not specified they are randomly assigned from the uniform distribution.

References

[R1106]Masuda, N., Miwa, H., Konno, N.: Geographical threshold graphs with small-world and scale-free properties. Physical Review E 71, 036108 (2005)
[R1107]Milan Bradonjić, Aric Hagberg and Allon G. Percus, Giant component and connectivity in geographical threshold graphs, in Algorithms and Models for the Web-Graph (WAW 2007), Antony Bonato and Fan Chung (Eds), pp. 209–216, 2007

Examples

Specify an alternate distance metric using the metric keyword argument. For example, to use the “taxicab metric” instead of the default Euclidean metric:

>>> dist = lambda x, y: sum(abs(a - b) for a, b in zip(x, y))
>>> G = nx.geographical_threshold_graph(10, 0.1, metric=dist)