NetworkXのgraph generator一覧

NetworkXで作成できるグラフのリストです。


## 前情報


NetworkXの[公式ドキュメント](https://networkx.org/documentation/networkx-2.4/reference/generators.html)を和訳したものです。バージョンは2.4です。全ては網羅できていません。訳語が間違っている場合はお知らせください。

動作確認はJupyter notebook上で行っています。コードを実行するにはあらかじめ`networkx`と`matplotlib.pyplot`をインポートしておいてください。

```python
import networkx as nx
import matplotlib.pyplot as plt
```



# Classic(古典的グラフ）

### balanced_tree（平衡木）

`balanced_tree(r, h, create_using=None)`

高さが`h`である完全平衡`r`分木を返します。

|パラメータ|型|説明|
|---|---|---|
|r|int|木の枝分かれ数。各ノードはr個の子ノードを持ちます。|
|h|int|木の高さ|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|


<details>
<summary>コード</summary><div>

```python
#balanced_tree
G=nx.balanced_tree(3,2)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div>
</details>

![balanced_tree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/8164d94b-b9f0-78f0-8622-389592e053cc.png)

### barbell_graph(バーベルグラフ）

`barbell_graph(m1, m2, create_using=None)`

バーベルグラフ（`m1`個のノードで構成された２つの完全グラフが`m2`個のノードからなる１本の道によってつながれたグラフ）を返します。

|パラメータ|型|説明|
|---|---|---|
|m1|int|左右の完全グラフ(bell)の個数。m1>1|
|m2|int|左右の完全グラフをつなぐ経路のノード数。m2>=0|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

ノードのナンバリング方法
左の完全グラフ：`0,1,...,m1-1`
経路：`m1,m1+1,...,m1+m2-1`
右の完全グラフ：`m1+m2,m1+m2+1,...,2*m1+m2-1`

例１

<details>
<summary>コード</summary><div>

```python
#barbell_graph
G=nx.barbell_graph(5,2)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![barbell_graph1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/92d22917-d021-72a6-2c98-a9cc8806c597.png)

例２（m2=0のとき）

<details>
<summary>コード</summary><div>

```python
G=nx.barbell_graph(5,0)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![barbell_graph2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/cdcd12c5-b7f7-30cb-db71-192a24ec0526.png)


### binomial_tree（二項木）
`binomial_tree(n)`

次数が`n`である二項木を返します。ノード数は$2^n$個、エッジ数は$2^n-1$個です。

|パラメータ|型|説明|
|---|---|---|
|n|int|木の次数|

例

<details>
<summary>コード</summary><div>

```python
G=nx.binomial_tree(3)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/e7968530-9251-cb86-ef65-b200796ce222.png)

### complete_graph（完全グラフ）

`complete_graph(n, create_using=None)`

あるノードが他のすべてのノードと連結しているグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int または iterable container of nodes|nが整数型のとき、ノードはrange(n)から作成されます。nがノードのイテラブルコンテナであるとき、それらノードによるグラフが作成されます|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|


例1（nが整数型のとき）


<details>
<summary>コード</summary><div>

```python
G=nx.complete_graph(6)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![complete_graph1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/7d64e96e-927c-4799-5239-2d9a7687ccfa.png)


例2（nがノードのコンテナであるとき）
<details>
<summary>コード</summary><div>

```python
G=nx.complete_graph(range(12,18))
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![complete_graph2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/c8174167-e479-781b-fc54-4e074fa261a6.png)

### complete_multipartite_graph（完全多部グラフ）
`complete_multipartite_graph(*subset_sizes)`

|パラメータ|型|説明|
|---|---|---|
|subset_sizes|taple of integers または tuple of node iterables|nが整数型のとき、多部グラフの各サブセットはn個の頂点をもちます。nがイテラブルであるときは、それらノードによるグラフが作成されます|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例
それぞれ2,3,3個のノードをもつ3つのサブセットからなる完全多部グラフを作成します。

<details>
<summary>コード</summary><div>

```python
G=nx.complete_multipartite_graph(2,3,3)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![complete_multi_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/b7d5faf5-9fdb-521a-aeb3-be8d87c3fea2.png)


### circular_ladder_graph（環状ラダーグラフ）

`circular_ladder_graph(n, create_using=None)`
長さnの環状ラダーグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int|1周の長さ|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例

<details>
<summary>コード</summary><div>

```python
G=nx.circular_ladder_graph(10)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![circular_ladder_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/d31584ec-1723-d783-0e18-7e8f40b6bdc7.png)

### circulant_graph（循環グラフ）

`circulant_graph(n, offsets, create_using=None)`

`n`個のノードからなる、循環グラフを返します。あるノードが他のどのノードとつながるかは`offsets`で指定されます。

|パラメータ|型|説明|
|---|---|---|
|n|int|ノードの個数|
|offsets|lists of integers|ノードオフセットのリスト|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例

<details>
<summary>コード</summary><div>

```python
G=nx.circulant_graph(10,[1,2])
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

`offsets=[1,2]`であることから、頂点iは頂点i+1,i+2とそれぞれつながっています。頂点0は頂点1,2に、頂点1は頂点2,3に,...,頂点9は頂点0,1につながっています。


![circulant_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/70195e29-ffe5-4a6e-d20f-9cd2e036df8b.png)

### cycle_graph(閉路グラフ）

`cycle_graph(n, create_using=None)`

|パラメータ|型|説明|
|---|---|---|
|n|int またはiterble container of nodes|nが整数型のとき、ノードはrange(n)から作成されます。nがノードのイテラブルコンテナであるとき、それらノードによるグラフが作成されます|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例

<details>
<summary>コード</summary><div>

```python
G=nx.cycle_graph(10)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/91a94ba8-db2d-9369-efeb-40fa9b4bb322.png)

### dorogovtsev_goltsev_mendes_graph（Dorogovstev-Goltsev-Mendesグラフ）

`dorogovtsev_goltsev_mendes_graph(n, create_using=None)`

Dorogovstev-Goltsev-Mendesアルゴリズムによって作成されたグラフを返します。

元論文
https://arxiv.org/abs/cond-mat/0112143

|パラメータ|型|説明|
|---|---|---|
|n|int|世代数|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.dorogovtsev_goltsev_mendes_graph(3)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/766641f6-c7fd-a0a8-7592-7319a1b23809.png)


### empty_graph（ノードをもつ空グラフ）

`empty_graph(n=0, create_using=None, default=<class 'networkx.classes.graph.Graph'>)`

エッジを持たない`n`個のノードからなるグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int|ノード数|
|create_using|Graph Instance, Constructor or None|作成したいグラフの型。Noneが指定されたときは`default`コンストラクタを使います。|
|default|Graph constructor (optional, default = nx.Graph)|`create_using=None`のときに使用されるコンストラクタ。|

例

<details>
<summary>コード</summary><div>

```python
G=nx.empty_graph(10)
plt.cla()
nx.draw_networkx(G,pos)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/910ab5fc-dbc4-ea7a-eeaf-37799de2cc62.png)



### create_usingの使い方
変数 create_using は Graph コンストラクタまたは "graph" ライクなオブジェクトでなければなりません。

create_usingの主な用途は3つあります。
1. 空グラフの性質を指定する。
2. 既存のグラフを空グラフにする
3. 自作のグラフ作成関数を作るとき、create_usingに好きなグラフコンストラクタを渡せるようにする。

### 1の例
空の有向グラフ(DiGraph)を作成します。

```python
n = 10
G = nx.empty_graph(n, create_using=nx.DiGraph)
```

### 2の例

完全グラフG1からエッジを取り除いた空グラフG2を作成します。

```python
n=5
G1=nx.complete_graph(n)
G1.number_of_edges() #10
G2=nx.empty_graph(n,create_using=G1)
G2.number_of_edges() #0
```

### ##3の例
自作のグラフ作成関数`mygraph`について、`create_using`の指定がないときはデフォルトコンストラクタ`nx.MultiGraph`を使い、そうでないときは指定されたコンストラクタを使うように設定します。

```python
def mygraph(n, create_using=None):
    G = nx.empty_graph(n, create_using, default=nx.MultiGraph)
    G.add_edges_from([(0, 1), (0, 1)])
    return G
G = mygraph(3)
G.is_multigraph() #True

G = mygraph(3, nx.Graph)
G.is_multigraph() #False
```

### full_rary_tree（全r分木）

`full_rary_tree(r, n, create_using=None)`

`n`個のノードから構成された全`r`分木を作成します。すべてのノードが葉であるか`r`個の子ノードを持っています。

|パラメータ|型|説明|
|---|---|---|
|r|int|木の枝分かれ数|
|n|int|ノード数|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例

<details>
<summary>コード</summary><div>
```python
G=nx.full_rary_tree(3,16)
pos=nx.spring_layout(G,iterations=1000)
plt.cla()
nx.draw_networkx(G,pos)
plt.show()
```

</div></details>



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/41796fc4-17df-feba-4412-af28e27edff1.png)

### ladder_graph（ラダーグラフ）

`ladder_graph(n, create_using=None)`

ラダーグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int|ラダーの長さ|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|
例

<details>
<summary>コード</summary><div>

```python
G=nx.ladder_graph(7)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/2665e853-9623-149f-e63d-d55f0f6eefea.png)

### lollipop_graph（ロリポップグラフ）

`lollipop_graph(m, n, create_using=None)`

ロリポップグラフ（`m`個のノードからなる完全グラフとそれにつながる`n`個のノードからなる経路）を返します。

|パラメータ|型|説明|
|---|---|---|
|m|int or iterable container of nodes (default = 0)|完全グラフを構成するノード数|
|n|int or iterable container of nodes (default = 0))|経路を構成するノード数|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例


<details>
<summary>コード</summary><div>


```python
G=nx.lollipop_graph(6,3)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/3d88348c-ce4f-9d98-c44a-5c94833ace8c.png)


### null_graph（空グラフ）

`null_graph(create_using=None)`

ノードもエッジも持たないグラフを返します。
`create_using`の使い方については`empty_graph`を参照してください。

|パラメータ|型|説明|
|---|---|---|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例

<details>
<summary>コード</summary><div>

```python
G=nx.null_graph()
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/7d5b8704-0618-f3e8-ea85-4cf13fc2e8c4.png)

### path_graph（道グラフ）

`path_graph(n, create_using=None)`

`n`個のノードからなる、同じノードを2度通らないグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int or iterable|ノードの個数|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.path_graph(5)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/ce945a40-b12b-b5f1-e817-ac6f56432e00.png)

### star_graph(星グラフ)

`star_graph(n, create_using=None)`

1つの中心ノードに対し`n`個の外周ノードが連結されたグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int or iterable|外周ノードの個数|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.star_graph(5)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/23bd35c7-ec8a-ebe9-4259-b1439088fd38.png)

### trivial_graph（トリビアルグラフ）

`trivial_graph(create_using=None)`

1個のノードのみからなる最も単純なグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>
```python
G=nx.trivial_graph()
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/80828519-6afa-f552-055b-ae96917a6ebf.png)


### turan_graph（トゥラーングラフ）

`turan_graph(n, r)`

`n`個のノードを`r`個の非連結部分に分けた完全多部グラフを返します。
エッジの数は`n**2*(r-1)/(2*r)`の端数を切り捨てた数になります。

|パラメータ|型|説明|
|---|---|---|
|n|int|ノードの個数。|
|r|int|非連結部分の個数。1<=r<=nである必要があります。|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.turan_graph(6,3)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/37af0bae-51c4-f567-e14c-78b9a5b41898.png)

ノードは(0,1),(2,3),(4,5)の3部分に分かれています。同じ部分に属しているノードは連結していません。

例で挙げたグラフは「3組のカップルがカクテルパーティーへ出かけた。会場では、全員が自身とその配偶者を除くすべての参加者とそれぞれ握手をする。そのときの関係性を参加者をノード、握手をエッジとして表現するとどのようなグラフになるか？」という問いに対する解答となっています。そのため「カクテルパーティーグラフ」と呼ばれます。

### wheel_graph（ホイールグラフ）

`wheel_graph(n, create_using=None)`

1つのハブノードに対し、n-1個の外周ノードが連結されたグラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int or iterable|ノードの個数。|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

Example

<details>
<summary>コード</summary><div>

```python
G=nx.wheel_graph(10)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/5a9b4937-3560-71b9-730f-6ba8dd22f90a.png)

# Expander graph（拡張グラフ）

強連結成分をもつ疎グラフです。

### margulis_gabber_galil_graph（Margulis-Gabber-Galilグラフ）

`margulis_gabber_galil_graph(n, create_using=None)`

Margulis-Gabber-Galilグラフを返します。無向多重グラフであり、ノードの次数は8です。このグラフの隣接行列の2番目に大きな固有値は$5\sqrt{2}$です。
グラフが有向または多重グラフでないときはエラーが返されます。


|パラメータ|型|説明|
|---|---|---|
|n|int or iterable|ノードの個数を定義します。ノードの個数は$n^2$です。|
|create_using|NetworkX graph constructor, optional (default MultiGraph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.margulis_gabber_galil_graph(3)
pos=nx.circular_layout(G)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

</div></details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/6e049ca0-0fde-ff56-065a-504fb1cc3f57.png)

### chordal_cycle_graph(弦を持つ閉路グラフ)

`chordal_cycle_graph(p, create_using=None)`

弦（chord, 閉路の一部ではないが閉路グラフ上の2つのノード間を連結するエッジ）をもつ閉路グラフを返します。ノードxはx*y=1(mod p)を満たすノードyに対し弦を持ちます。
グラフが有向または多重グラフでないときはエラーが返されます。

|パラメータ|型|説明|
|---|---|---|
|p|prime number|ノードの個数を定義します。素数である必要があります。|
|create_using|NetworkX graph constructor, optional (default MultiGraph)|作成したいグラフの型|

<details>
<summary>コード</summary><div>

```python
G=nx.chordal_cycle_graph(7)
pos=nx.circular_layout(G)
plt.cla()
nx.draw_networkx(G,pos)
plt.show()
```
</div></details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/8b73d1bf-e3aa-bbe4-f074-629a4ae61f73.png)

# Lattice（格子）

### grid_2d_graph（２次元格子グラフ）

`grid_2d_graph(m, n, periodic=False, create_using=None)`

２次元の格子グラフを返します。

|パラメータ|型|説明|
|---|---|---|
|m,n|int or iterable container of nodes|整数型のとき、ノードはrange(n)から作成されます。ノードのコンテナであるときは、それらの要素がノード座標となります。|
|periodic|bool(default:False)|Trueならば格子の端にあるノードは反対側のノードとつながり、トーラスになります。|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例１

<details>
<summary>コード</summary><div>

```python
#grid_2d_graph
G=nx.grid_2d_graph(4,6)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/606c592f-cea4-76e2-4dea-5134311b5c90.png)

例２
<details>
<summary>コード</summary><div>
```python
G=nx.grid_2d_graph(4,6,periodic=True)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/2b448ff3-8ce1-2009-93b2-afd3e8d77a86.png)

### grid_graph（格子グラフ）

`grid_graph(dim, periodic=False)`

n次元の格子グラフを返します。nは`dim`の長さです。

|パラメータ|型|説明|
|---|---|---|
|dim|list or tuple of numbers or iterables of nodes|dimには各次元について、その次元のサイズを表す数値を表すリストやタプルが入ります。または、その次元のノードのイテラブルが入ります。grid_graph の次元イコール dim の長さです．|
|periodic|bool(default:False)|Trueならば格子の端にあるノードは反対側のノードとつながり、トーラスになります。|

例1
<details>
<summary>コード</summary><div>

```python
dim=[2,3,4]
G=nx.grid_graph(dim)
plt.cla()
nx.draw_networkx(G)
plt.show()
```
</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/a19120d5-8d04-d184-4f08-834c4cd9affa.png)

```python
G = nx.grid_graph(dim=[range(7, 9), range(3, 6)])
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/47386a4a-e68e-d81e-03df-04e842845aeb.png)


### hexagonal_lattice_graph（六角形格子グラフ）

`hexagonal_lattice_graph(m, n, periodic=False, with_positions=True, create_using=None)`

六角形格子グラフを返します。

|パラメータ|型|説明|
|---|---|---|
|m|int|六角形の行数|
|n|int|六角形の列数|
|periodic|bool(default:False)|Trueならば格子の端にあるノードは反対側のノードとつながります。この機能を使いたい場合、nは奇数かつn>1かつm>1である必要があります。|
|with_positions|bool(default:True)|`pos`に各ノードの座標を保管するかどうか|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

```python
G=nx.hexagonal_lattice_graph(4,2)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/9d672a57-389a-86e5-7dea-8d5519d20f3f.png)

### hypercube_graph（超立方体グラフ）

`hypercube_graph(n)`

n次元の超立方体グラフを返します。

|パラメータ|型|説明|
|---|---|---|
|n|int|超立方体の次元の数。ノードの数は２のn乗個です。|

```python
G=nx.hypercube_graph(4)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/2dd4bed7-8a12-4afe-752b-89f24aaef961.png)

### triangular_lattice_graph（三角格子グラフ）

`triangular_lattice_graph(m, n, periodic=False, with_positions=True, create_using=None)`

m行n列の三角格子グラフを返します。



|パラメータ|型|説明|
|---|---|---|
|m|int|行数|
|n|int|列数|
|periodic|bool(default:False)|Trueならば格子の端にあるノードは反対側のノードとつながります。m>=3かつn>=5である必要があります。mまたはnが奇数のときはずれてつながります。|
|with_positions|bool(default:True)|グラフノード属性`pos`に各ノードの座標を保管するかどうか|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

```
G=nx.triangular_lattice_graph(4,5)
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/0e7194fa-d38d-d90f-09ff-58490e6e62bb.png)

# Small

### make_small_graph（スモールグラフをつくる）

`make_small_graph(graph_description, create_using=None)`

`graph_description`の情報をもとに小さなグラフを作ります。
`graph_description`は`[Itype,name,n,xlist]`という形式のリストです。ここで、Itypeは"adjacencylist"または"edgelist"のどちらかです。nameはグラフの名前、nはノードの個数です。

`Itype="adjacencylist"`のときは、xlistには隣接リストを指定します。
`Itype="edgelist"`のときは、xlistにはエッジリストを指定します。

|パラメータ|型|説明|
|---|---|---|
|graph_description|[Itype,name,n,xlist]|Itypeは"adjacencylist"または"edgelist"のどちらかです。nameはグラフの名前、nはノードの個数です。|
|create_using|NetworkX graph constructor, optional (default=nx.Graph)|作成したいグラフの型|

例１

```python
G=nx.make_small_graph(["adjacencylist","C_4",4,[[2,4],[1,3],[2,4],[1,3]]])
plt.cla()
nx.draw_networkx(G)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/93816e80-0326-5580-2cde-ced616b8840c.png)

例２

```python
G=nx.make_small_graph(["edgelist","C_4",4,[[1,2],[3,4],[2,3],[4,1]]])
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/1fd46b13-9de2-e362-cf20-1ecfc011f80f.png)


### LCF_graph（LCFグラフ）

`LCF_graph(n, shift_list, repeats, create_using=None)`

LCF(Lederberg-Coxeter-Fruchte)表記法を用いてグラフを作成します。LCF表記法は立方ハミルトニアングラフの作成に用いられます。

詳しい説明は以下を参照してください。
http://mathworld.wolfram.com/LCFNotation.html

例１($K_{3,3}$)

```python
G = nx.LCF_graph(6, [3, -3], 3)
pos=nx.circular_layout(G)
plt.cla()
nx.draw_networkx(G,pos)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/18cd1c98-3bf8-3ebc-6130-a4b62274d7ab.png)


### bull_graph（ブルグラフ）

`bull_graph(create_using=None)`

ブル（雄牛）グラフを返します。このグラフは１つの三角形とそれにつながる２個の連結でないノードから構成されています。

```python
G=nx.bull_graph()
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/bb7a1bc1-4300-59b9-df22-bd2cdf255449.png)


### chvatal_graph（フバータルグラフ）

`chvatal_graph(create_using=None)`

フバータルグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/f9a32c70-5f25-80c5-6acf-4068836b368f.png)

### cubical_graph（立方体グラフ）

`cubical_graph(create_using=None)`

3-正則の正六面体グラフを返します。

```python
G=nx.cubical_graph()
plt.cla()
nx.draw_networkx(G)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/6942f3e7-a590-2b02-ac7e-68705601b8eb.png)

### desargues_graph（デザルググラフ）

`desargues_graph(create_using=None)`

デザルググラフを返します。

```python
G=nx.desargues_graph()
plt.cla()
pos=nx.circular_layout(G)
nx.draw_networkx(G,pos)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/a7a0c82b-c5ea-57e7-f1a7-32137309aca7.png)

### diamond_graph（ダイヤモンドグラフ）

`diamond_graph(create_using=None)`

ダイヤモンドグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/9a0c11cd-ef92-4b26-f39d-93c8ae014b6c.png)

### dodecahedral_graph（正十二面体グラフ）

`dodecahedral_graph(create_using=None)`

正十二面体グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/33601672-5d6b-5504-acad-45d431ea2ed8.png)

### frucht_graph（フレフトグラフ）

`frucht_graph(create_using=None)`

フレフトグラフを返します。このグラフは、対称性を持たない最小のキュービタルグラフの一つです。自己同型群は単位元のみで構成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/023db55a-98a3-f35b-25c8-5541f14640f6.png)

### heawood_graph（ヒーウッドグラフ）

`heawood_graph(create_using=None)`

ヒーウッドグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/c1d0f072-a80d-3b6c-4cd3-896e5b135d64.png)

### hoffman_singleton_graph（ホフマンーシングルトングラフ）

`hoffman_singleton_graph()`

ホフマンーシングルトングラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/6b4197b0-8136-e426-b75b-897d191223b5.png)

もっときれいにグラフを書くと五芒星が見えます。
https://mathworld.wolfram.com/Hoffman-SingletonGraph.html

### house_graph（ハウスグラフ）

`house_graph(create_using=None)`

家型のグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/a5e9c9e7-1fd9-aa75-42dc-3edeebe13637.png)

### house_x_graph（ハウスXグラフ）

`house_x_graph(create_using=None)`

家型のグラフの四角部分にXが加わったグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/7645b7a0-7731-f6f7-8975-86064fecadd9.png)


### icosahedral_graph（正二十面体グラフ）

`icosahedral_graph(create_using=None)`

正二十面体グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/3e7fdf20-d8c0-c16f-4f7f-22fd07afda2f.png)

### krackhardt_kite_graph（クラックハートのカイトグラフ）

`krackhardt_kite_graph(create_using=None)`

Krackhardtのカイト（凧）グラフを返します。このグラフはDavid Krackhardtによって導入された１０人の俳優のソーシャルネットワークです。伝統的なラベルはAndre=1, Beverley=2, Carol=3, Diane=4, Ed=5, Fernando=6, Garth=7, Heather=8, Ike=9, Jane=10です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/f4d67b17-c40c-b56f-8ac1-ca974287def4.png)

### moebius_kantor_graph（メビウスーカントールグラフ）

`moebius_kantor_graph(create_using=None)`

メビウスーカントールグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/e968a571-25ce-ad7d-81f5-c026367270b4.png)

### octahedral_graph(八面体グラフ)

`octahedral_graph(create_using=None)`

八面体グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/a2c18eb6-d3bb-4d68-ad9f-590e7bb89078.png)

### pappus_graph(パップスグラフ)

`pappus_graph()`

パップスグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/16ad709f-c759-e0e9-f685-484a74bbc499.png)

### petersen_graph(ピーターセングラフ)

`petersen_graph(create_using=None)`

ピーターセングラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/28c56de6-2e71-e15d-02e6-52c7ff3a4e8c.png)

### sedgewick_maze_graph(セッジウィック迷路グラフ)

`sedgewick_maze_graph(create_using=None)`

以下の文献を参考にした迷路グラフを返します。ノードは0~7でラベル付けされます、
Sedgewick,3rd Edition, Part 5, Graph Algorithms, Chapter 18,

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/badf0b8f-82b6-6070-0d95-0e951eafc70f.png)

### tetrahedral_graph(四面体グラフ)

`tetrahedral_graph(create_using=None)`

3-正則の正四面体グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/9d63af8b-1e32-ba98-3c76-e904798d81e5.png)

### truncated_cube_graph(切頂立方体グラフ)

`truncated_cube_graph(create_using=None)`

切頂立方体（角をとったサイコロ様）グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/9579af57-51e2-98f5-7b7d-93ccb75873d5.png)

### truncated_tetrahedron_graph(切頂四面体グラフ)

`truncated_tetrahedron_graph(create_using=None)`

切頂四面体グラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/5b4fbb2a-01fe-40d9-8be2-21dce1eada4d.png)

### tutte_graph(タットグラフ)

`tutte_graph(create_using=None)`

タットグラフを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/55f9572a-1a7c-3be5-60aa-52200bf9e747.png)


# Social Networks（ソーシャルネットワーク）

有名なソーシャルネットワークグラフです。

### karate_club_graph（Zacharyの空手クラブ）

`karate_club_graph()`

アメリカの社会心理学者Zacharyが調査した空手クラブのメンバー間のネットワークです。ノード0とノード32,33を中心とする2つの派閥に分かれていることがわかります。

Zachary, Wayne W. “An Information Flow Model for Conflict and Fission in Small Groups.” Journal of Anthropological Research, 33, 452–473, (1977).

```python
G=nx.karate_club_graph()
plt.figure(figsize=(8,6))
nx.draw_networkx(G)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/c7d7c496-8f01-2617-0501-11ffae43a45d.png)



### davis_southern_women_graph（Davisらの南部女性グラフ）

`davis_southern_women_graph()`

1930年代にDavisらによって調査されたアメリカ南部の女性18人のネットワークです。女性を表す18個のノードと参加したイベントを表す14個のノードから構成される2部グラフです。

A. Davis, Gardner, B. B., Gardner, M. R., 1941. Deep South. University of Chicago Press, Chicago, IL.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/0d3f20f9-99ae-83f7-29e5-b252501a7c11.png)

### florentine_families_graph（フィレンツェの家族）

`florentine_families_graph()`

ルネサンス期フィレンツェにおけるメディチ家などの有力家の婚姻関係です。

Ronald L. Breiger and Philippa E. Pattison Cumulated social roles: The duality of persons and their algebras,1 Social Networks, Volume 8, Issue 3, September 1986, Pages 215-256

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/8874ea0c-718e-c19f-6d26-7608fa032e5b.png)

### les_miserables_graph()

`les_miserables_graph()`

小説「レ・ミゼラブル」の登場人物のグラフです。

D. E. Knuth, 1993. The Stanford GraphBase: a platform for combinatorial computing, pp. 74-87. New York: AcM Press.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253018/dc6d15b6-d2e4-856b-e6df-7ec67a8f77b0.png)


# 参照

* https://networkx.org/documentation/networkx-2.4/reference/generators.html