510626c15f
* Add NonUniformImage, example and tests. * Use updated test-data tag * Fix line ending, remove lut.setLevels keyword arguments call Co-authored-by: Ogi <ognyan.moore@gmail.com>
87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Display a non-uniform image.
|
|
This example displays 2-d data as an image with non-uniformly
|
|
distributed sample points.
|
|
"""
|
|
|
|
import initExample ## Add path to library (just for examples; you do not need this)
|
|
|
|
from pyqtgraph.Qt import QtGui, QtCore
|
|
import pyqtgraph as pg
|
|
import numpy as np
|
|
from pyqtgraph.graphicsItems.GradientEditorItem import Gradients
|
|
from pyqtgraph.graphicsItems.NonUniformImage import NonUniformImage
|
|
|
|
|
|
RPM2RADS = 2 * np.pi / 60
|
|
RADS2RPM = 1 / RPM2RADS
|
|
|
|
kfric = 1 # [Ws/rad] angular damping coefficient [0;100]
|
|
kfric3 = 1.5e-6 # [Ws3/rad3] angular damping coefficient (3rd order) [0;10-3]
|
|
psi = 0.2 # [Vs] flux linkage [0.001;10]
|
|
res = 5e-3 # [Ohm] resistance [0;100]
|
|
v_ref = 200 # [V] reference DC voltage [0;1000]
|
|
k_v = 5 # linear voltage coefficient [-100;100]
|
|
|
|
# create the (non-uniform) scales
|
|
tau = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 220], dtype=np.float32)
|
|
w = np.array([0, 250, 500, 750, 1000, 1500, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000], dtype=np.float32) * RPM2RADS
|
|
v = 380
|
|
|
|
# calculate the power losses
|
|
TAU, W = np.meshgrid(tau, w, indexing='ij')
|
|
V = np.ones_like(TAU) * v
|
|
|
|
P_loss = kfric * W + kfric3 * W ** 3 + (res * (TAU / psi) ** 2) + k_v * (V - v_ref)
|
|
|
|
P_mech = TAU * W
|
|
P_loss[P_mech > 1.5e5] = np.NaN
|
|
|
|
# green - orange - red
|
|
Gradients['gor'] = {'ticks': [(0.0, (74, 158, 71)), (0.5, (255, 230, 0)), (1, (191, 79, 76))], 'mode': 'rgb'}
|
|
|
|
app = QtGui.QApplication([])
|
|
|
|
win = QtGui.QMainWindow()
|
|
cw = pg.GraphicsLayoutWidget()
|
|
win.show()
|
|
win.resize(600, 400)
|
|
win.setCentralWidget(cw)
|
|
win.setWindowTitle('pyqtgraph example: Non-uniform Image')
|
|
|
|
p = cw.addPlot(title="Power Losses [W]", row=0, col=0)
|
|
|
|
lut = pg.HistogramLUTItem()
|
|
|
|
p.setMouseEnabled(x=False, y=False)
|
|
|
|
cw.addItem(lut)
|
|
|
|
# load the gradient
|
|
lut.gradient.loadPreset('gor')
|
|
|
|
image = NonUniformImage(w * RADS2RPM, tau, P_loss.T)
|
|
image.setLookupTable(lut, autoLevel=True)
|
|
image.setZValue(-1)
|
|
p.addItem(image)
|
|
|
|
h = image.getHistogram()
|
|
lut.plot.setData(*h)
|
|
|
|
p.showGrid(x=True, y=True)
|
|
|
|
p.setLabel(axis='bottom', text='Speed [rpm]')
|
|
p.setLabel(axis='left', text='Torque [Nm]')
|
|
|
|
# elevate the grid lines
|
|
p.axes['bottom']['item'].setZValue(1000)
|
|
p.axes['left']['item'].setZValue(1000)
|
|
|
|
|
|
## Start Qt event loop unless running in interactive mode or using pyside.
|
|
if __name__ == '__main__':
|
|
import sys
|
|
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
|
|
QtGui.QApplication.instance().exec_()
|