Python PyQtGraphで画像の下と横にグラフを表示する方法を説明する。
完成イメージ
方法
- 画像をrow=0, col=0の位置にプロット。
- 縦グラフをrow=0, col=1の位置にプロット。
- .invertY(True)でXY軸を反転。
- 横グラフを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で画像の下と横にグラフを表示する方法を説明した。
コメント