Python | PyQtGraph 画像の下と横にグラフを表示する方法

PyQtGraph

Python PyQtGraphで画像の下と横にグラフを表示する方法を説明する。

完成イメージ

方法

  1. 画像をrow=0, col=0の位置にプロット。
  2. 縦グラフをrow=0, col=1の位置にプロット。
  3. .invertY(True)でXY軸を反転。
  4. 横グラフをrow=1, col=0の位置にプロット。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget
import pyqtgraph as pg
import numpy as np


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.ウィンドウを準備する()
        self.画像を準備する()
        self.画像をプロット()
        self.横方向の平均値を縦にプロット()
        self.縦方向の平均値を横にプロット()

    def ウィンドウを準備する(self):
        self.image_viewer = pg.GraphicsLayoutWidget(show=True)
        self.image_viewer.setGeometry(0, 0, 660, 700)

    def 画像を準備する(self):
        self.画像データ = np.random.normal(size=(400, 500))
        self.画像データ[:, 300:350] = 1
        self.画像データ[200:250, :] = 2
        self.画像オブジェクト = pg.ImageItem(self.画像データ)

        self.横方向の平均値 = np.mean(self.画像データ, axis=0)
        self.縦方向の平均値 = np.mean(self.画像データ, axis=1)

        self.画像横幅 = self.画像データ.shape[0]
        self.画像高さ = self.画像データ.shape[1]

    def 画像をプロット(self):
        self.画像プロット = self.image_viewer.addPlot(row=0, col=0)        # ? 1
        self.画像プロット.getViewBox().invertY(True)
        self.画像プロット.getViewBox().setAspectLocked(True)
        self.画像プロット.addItem(self.画像オブジェクト)
        self.画像プロット.setMinimumHeight(self.画像高さ)
        self.画像プロット.setMinimumWidth(self.画像横幅)

    def 横方向の平均値を縦にプロット(self):
        self.縦グラフ = self.image_viewer.addPlot(row=0, col=1)           # ? 2
        self.縦グラフ.setYLink(self.画像プロット)
        self.縦グラフ.invertY(True)                                       # ? 3
        self.縦グラフ.showGrid(x=True, y=True)
        self.縦グラフ.plot(x=self.横方向の平均値, y=np.arange(self.画像高さ))

    def 縦方向の平均値を横にプロット(self):
        self.横グラフ = self.image_viewer.addPlot(row=1, col=0)           # ? 4
        self.横グラフ.setXLink(self.画像プロット)
        self.横グラフ.showGrid(x=True, y=True)
        self.横グラフ.plot(x=np.arange(self.画像横幅), y=self.縦方向の平均値)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    sys.exit(app.exec())

まとめ

Python PyQtGraphで画像の下と横にグラフを表示する方法を説明した。

コメント