LoginSignup
2
1

More than 3 years have passed since last update.

複数の画像を敷き詰めてプロットする方法をいつも忘れちゃう(ML向け)

Posted at

はじめに

画像データをこういう感じにプロットするやり方をいつも忘れてしまう自分用メモです。
subplot.png

前提

データセットはこのようなディレクトリ構成になっていることを想定しています。
├─Dataset
│ ├─classA
│ │ ├─classAの画像たち
│ ├─classB
│ ├─classC
│ ├─classD
│ ├─classF
│ └─...
...

ソースコード

show_class_images.py
import glob
import os

import matplotlib.pyplot as plt
from PIL import Image

# データセットの親ディレクトリ
DATA_PARENT_DIR = '親ディレクトリを指定'
# 子ディレクトリのリスト
data_dir_list = glob.glob(DATA_PARENT_DIR + '\*')
# ディレクトリ数
class_num = len(data_dir_list)
# 1ディレクトリあたりに敷き詰める画像数
SHOW_FILE_NUM = 6

fig = plt.figure(figsize=(12, 12))

# subplot用のカウント
cnt = 1

for data_dir in data_dir_list:
    filepath_list = glob.glob(data_dir + '\*')
    dirname = os.path.basename(data_dir)

    # ディレクトリ内のファイル
    for i in range(SHOW_FILE_NUM):
        filepath = filepath_list[i]
        filename = os.path.basename(filepath)
        img = Image.open(filepath)
        # 6*6の1マス分を指定(cnt)してプロット
        ax = fig.add_subplot(class_num, SHOW_FILE_NUM, cnt)
        plt.imshow(img)
        # 目盛りを消す
        ax.axis('off')
        # ディレクトリ名(クラス名)+ファイル名をタイトルに出す
        plt.title(os.path.join(dirname, filename))
        # 描画用カウントアップ
        cnt += 1

plt.show()

# 保存する
fig.savefig('./subplot.png')

引用

データセットはこちらからお借りしました。ありがとうございました。
DiceRecognitionDatasetForML

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1