matplotlib のサンプルコードでよく見かける
fig, ax = plt.subplots()
この書き方、Python 初心者にはかなり不思議に見えます。
- 変数がカンマで並んでいる
- 関数が 2 つの値を返している
- しかもそれを一度に受け取っている
基礎コースを一通り学んだつもりでも、 この形は初見だと「え、何これ?」となりやすいポイントです。
この記事では、 plt.subplots の説明ではなく、Python の文法としての「複数の値を返す関数」 に焦点を当てて解説します。
Python の関数は「複数の値を返せる」
Python の関数は、return で 複数の値を返すことができます。
例:
def get_position():
return 100, 200
この関数は「100 と 200」を返します。
実は「タプルを返している」
Python は複数の値を返すとき、内部的には タプル を返しています。
pos = get_position()
print(pos) # (100, 200)
つまり、返り値はこういう形:
(100, 200)
タプルは「同時代入」で分解できる
Python には アンパック(unpacking) という仕組みがあります。
x, y = (100, 200)
これで、
- x = 100
- y = 200
と自動的に分解されます。
これが「fig, ax = plt.subplots()」の正体
plt.subplots() は内部で 2つの値(Figure と Axes) を返しています。
つまり実際にはこう:
(fig, ax) = plt.subplots()
そして Python のアンパックにより、
- fig → Figure(ウィンドウ)
- ax → Axes(グラフを描く領域)
という形で受け取っているだけです。
例:自分で同じ仕組みを作ってみる
def create_pair():
return "A", "B"
x, y = create_pair()
print(x) # A
print(y) # B
これと まったく同じ構造が matplotlib で起きています。
なぜこの書き方が便利なのか?
- 返り値をまとめて受け取れる
- 変数名を自由に付けられる
- コードが読みやすくなる
特に matplotlib では、
- fig:ウィンドウの操作(タイトル変更など)
- ax:グラフ描画の操作
と役割が違うため、 2つの値を返して分けて使うのが合理的なのです。
まとめ

| 書き方 | 意味 |
|---|---|
return a, b | タプル (a, b) を返す |
x, y = func() | タプルを分解して受け取る |
fig, ax = plt.subplots() | Figure と Axes を同時に受け取る |
つまり、
fig, ax = plt.subplots() は、Python の「複数の値を返す関数」と「タプルのアンパック」の組み合わせで動いているだけ
ということです。

HR