Matplotlibのaxes.flatとは?使い方をわかりやすく解説
axes.flat は、サブプロットのAxesオブジェクトが格納された2次元配列に対して、1次元のイテレータ(反復子)を返す属性です。これにより、行と列を意識せずに、すべてのサブプロットを順番に処理できるようになります。
axes.flatの基本的な使い方
以下の手順で、axes.flatを使って複数のサブプロットに一括でグラフを描画する方法を見ていきましょう。
figure.figsizeで図のサイズを設定し、figure.autolayoutで余白を自動調整します。subplots()メソッドを使って、図とサブプロットのセットを作成します。
NumPyを使って x および y のデータポイントを生成します。
axes.flat を使って、作成したすべてのAxesオブジェクトをループ処理します。
plot()メソッドでxとyのデータポイントをプロットします。
show()メソッドで図を表示します。
サンプルコード
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, axes = plt.subplots(nrows=2, ncols=3)
x = np.random.rand(10)
y = np.random.rand(10)
for _, ax in enumerate(axes.flat):
ax.plot(x, y)
plt.show()実行結果
上記のコードを実行すると、2行3列の6つのサブプロットすべてに同じデータの折れ線グラフが描画されます。axes.flatを使うことで、ネストしたループを書くことなく、シンプルに全Axesへアクセスできるのがポイントです。
なぜaxes.flatが必要なのか
plt.subplots(nrows=2, ncols=3)のように複数行・複数列のサブプロットを作成すると、戻り値の axes は2次元のNumPy配列になります。このままでは for ax in axes: のように書いても各行(1次元配列)が取り出されるだけで、個々のAxesにはアクセスできません。
そこで flat 属性を使うと、配列が1次元に平坦化されたイテレータが得られるため、次のように簡潔に記述できます。
# axes.flatを使わない場合(二重ループが必要)
for row in axes:
for ax in row:
ax.plot(x, y)
# axes.flatを使う場合(1つのループで済む)
for ax in axes.flat:
ax.plot(x, y)なお、NumPy配列には flatten() や ravel() メソッドもありますが、flat はイテレータとして動作するため、メモリ効率が良いという利点があります。
-
Matplotlibで軸とグリッドを非表示にした3D散布図を作成する方法
Matplotlibで3Dプロット上に散布図を描画する際、軸やグリッドを非表示にしたいケースは少なくありません。例えば、データポイントそのものの形状や分布だけを視覚的に強調したい場合などが該当します。このような場合は、scatter()メソッドで散布図を描画し、ax.axis(off)を使って軸をオフにすることで実現できます。 手順 figureサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 figure()メソッドを使用して、新しい図を作成するか既存の図をアクティブにします。 add_subplot()メソッドにprojection=3dを指定して、3D用の軸を
-
Matplotlibで軸(Axes)作成後にサブプロットのサイズ・位置を変更する方法
Matplotlibでは、軸(Axes)を作成した後でも、GridSpecクラスを活用することでサブプロットのサイズや位置を柔軟に変更できます。以下の手順に沿って実装方法を見ていきましょう。 figure()メソッドを使って、新しい図を作成するか、既存の図をアクティブにします。 add_subplot()メソッドを使って、図にサブプロット配置の一部として「~.axes.Axes」を追加します。 GridSpec()クラスを使って、図内にサブプロットを配置するためのグリッドレイアウトを定義します。 グリッドスペックの位置を取得し、set_position()で対象の軸に適用します。 set_s