matplotlibでAxesを真っ白にする(x軸とかy軸なんかを消して非表示にする)
はじめに
matplotlibでsubplotsを使って適当にグラフを並べるのはよくある処理だと思います。しかし、きれいに長方形で配置できないときもあります。
import numpy as np import matplotlib.pyplot as plt np.random.seed(0) data = [(np.random.randint(10, size=(10, )), np.random.randint(10, size=(10, ))) for x in range(5)] fig, axes = plt.subplots(nrows=2, ncols=3) for (x, y), ax in zip(data, axes.ravel()): ax.scatter(x, y) plt.savefig("fig1.png")
タイル状に作るので、場合によっては無駄なAxesが生成されます。これが邪魔なので消したいという場合、どうしたらいいのでしょうか?
解決策
ax.axis("off")みたいにすると消せます。
matplotlib.axes.Axes.axis — Matplotlib 3.1.0 documentation
あとはこれが呼ばれるようにすればオッケーです。やり方はいろいろありますが(それこそデータを1つずつ個別にプロットすれば簡単)、今回はforループとzipを使っているので、zip_longestで対応してみましょう(この辺は臨機応変に書いてください)。
from itertools import zip_longest import numpy as np import matplotlib.pyplot as plt np.random.seed(0) data = [(np.random.randint(10, size=(10, )), np.random.randint(10, size=(10, ))) for x in range(5)] fig, axes = plt.subplots(nrows=2, ncols=3) for xy, ax in zip_longest(data, axes.ravel()): if xy is None: ax.axis("off") continue x, y = xy ax.scatter(x, y) plt.savefig("fig2.png")
うまくいきました。右下がちゃんと真っ白になっています。
まとめ
私は長年これを知らなくて、画像編集で消したりしていたのですが、ax.axis("off")を覚えたので、これで今後はかっこいいグラフがスマートに描けます。