matplotlib.pyplot.clim pyqtgraph 对应
matplotlib.pyplot.clim counterpart in pyqtgraph
我只想将颜色图(“热”)应用于图像的特定值范围。我已经从 matplotlib.pyplot.clim 了解到此功能,您必须在其中指定缩放的最小值和最大值。据我了解,您应该为此使用 setLevels([min,max]) 。
我已经包括了一个最小的例子,它表明不幸的是这两种表示并不等同。
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
import os
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui#, QtWidgets
#import PyQt5.QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QFileDialog, \
QScrollArea, QVBoxLayout, QGroupBox, QLabel, QFormLayout, QComboBox, QHBoxLayout
from skimage import io
import sys
def main():
imarray = np.random.rand(100, 100) * 515
imarray = np.clip(imarray, 0, 515)
plt_example(imarray)
pyqtgraph_example(imarray)
def plt_example(data):
plt.imshow(data, cmap='hot')
c = plt.colorbar()
plt.clim(0, 200)
plt.show()
def pyqtgraph_example(data):
colormap = cm.get_cmap("hot")
colormap._init()
lut = (colormap._lut * 255).view(np.ndarray)
app = pg.mkQApp("Test")
win = pg.GraphicsLayoutWidget()
win.show()
win.setWindowTitle('pyqtgraph example: ImageItem')
view = win.addViewBox()
## lock the aspect ratio so pixels are always square
view.setAspectLocked(True)
## Create image item
img = pg.ImageItem()
view.addItem(img)
img.setImage(data)
img.setLevels([0, 200]) # same functionality as clim?
img.setLookupTable(lut)
app.exec()
if __name__ == "__main__":
main()
你知道如何在 pyqtgraph 中获得与在 matplotlib 中使用 clim 相同的表示吗?
第一张图显示使用 matplotlib 的结果,第二张图显示使用 pyqtgraph 的结果。
这个问题在此处进入了 pyqtgraph 问题跟踪器:https://github.com/pyqtgraph/pyqtgraph/pull/1985#issuecomment-932223288
这里有一些代码可以在两个库之间生成相同的结果
import matplotlib.pyplot as plt
import numpy as np
import pyqtgraph as pg
def main():
imarray = np.random.rand(100, 100) * 515
imarray = np.clip(imarray, 0, 515)
plt_example(imarray)
pyqtgraph_example(imarray)
def plt_example(data):
plt.imshow(data, cmap='hot')
c = plt.colorbar()
plt.clim(0, 200)
plt.show(block=False)
def pyqtgraph_example(data):
app = pg.mkQApp("Test")
win = pg.GraphicsLayoutWidget()
win.setWindowTitle('pyqtgraph example: ImageItem')
win.show()
# add plot with correct axis orientation and locked aspect ratio
plot = win.addPlot()
plot.setAspectLocked(True)
plot.invertY()
# Create image item
img = pg.ImageItem(data, axisOrder='row-major')
plot.addItem(img)
# Create color bar and have it control image levels
cmap = pg.colormap.getFromMatplotlib('hot')
cbi = pg.ColorBarItem(colorMap=cmap)
cbi.setImageItem(img, insert_in=plot)
cbi.setLevels([0, 200]) # colormap range
app.exec()
if __name__ == "__main__":
main()
问题跟踪器中此代码的发布者指出,“溢出”值似乎在 matplotlib 中呈现为白色,而在 pyqtgraph 中呈现为黑色。另外,pyqtgraph图像向左旋转了90度,因为没有设置轴顺序,y轴可能是反转的。
为了获得正确的旋转方向,代码有两行注释
plot.invertY()
和
pg.ImageItem(data, axisOrder='row-major')
希望这对您有所帮助!
我只想将颜色图(“热”)应用于图像的特定值范围。我已经从 matplotlib.pyplot.clim 了解到此功能,您必须在其中指定缩放的最小值和最大值。据我了解,您应该为此使用 setLevels([min,max]) 。 我已经包括了一个最小的例子,它表明不幸的是这两种表示并不等同。
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
import os
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui#, QtWidgets
#import PyQt5.QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QFileDialog, \
QScrollArea, QVBoxLayout, QGroupBox, QLabel, QFormLayout, QComboBox, QHBoxLayout
from skimage import io
import sys
def main():
imarray = np.random.rand(100, 100) * 515
imarray = np.clip(imarray, 0, 515)
plt_example(imarray)
pyqtgraph_example(imarray)
def plt_example(data):
plt.imshow(data, cmap='hot')
c = plt.colorbar()
plt.clim(0, 200)
plt.show()
def pyqtgraph_example(data):
colormap = cm.get_cmap("hot")
colormap._init()
lut = (colormap._lut * 255).view(np.ndarray)
app = pg.mkQApp("Test")
win = pg.GraphicsLayoutWidget()
win.show()
win.setWindowTitle('pyqtgraph example: ImageItem')
view = win.addViewBox()
## lock the aspect ratio so pixels are always square
view.setAspectLocked(True)
## Create image item
img = pg.ImageItem()
view.addItem(img)
img.setImage(data)
img.setLevels([0, 200]) # same functionality as clim?
img.setLookupTable(lut)
app.exec()
if __name__ == "__main__":
main()
你知道如何在 pyqtgraph 中获得与在 matplotlib 中使用 clim 相同的表示吗?
第一张图显示使用 matplotlib 的结果,第二张图显示使用 pyqtgraph 的结果。
这个问题在此处进入了 pyqtgraph 问题跟踪器:https://github.com/pyqtgraph/pyqtgraph/pull/1985#issuecomment-932223288
这里有一些代码可以在两个库之间生成相同的结果
import matplotlib.pyplot as plt
import numpy as np
import pyqtgraph as pg
def main():
imarray = np.random.rand(100, 100) * 515
imarray = np.clip(imarray, 0, 515)
plt_example(imarray)
pyqtgraph_example(imarray)
def plt_example(data):
plt.imshow(data, cmap='hot')
c = plt.colorbar()
plt.clim(0, 200)
plt.show(block=False)
def pyqtgraph_example(data):
app = pg.mkQApp("Test")
win = pg.GraphicsLayoutWidget()
win.setWindowTitle('pyqtgraph example: ImageItem')
win.show()
# add plot with correct axis orientation and locked aspect ratio
plot = win.addPlot()
plot.setAspectLocked(True)
plot.invertY()
# Create image item
img = pg.ImageItem(data, axisOrder='row-major')
plot.addItem(img)
# Create color bar and have it control image levels
cmap = pg.colormap.getFromMatplotlib('hot')
cbi = pg.ColorBarItem(colorMap=cmap)
cbi.setImageItem(img, insert_in=plot)
cbi.setLevels([0, 200]) # colormap range
app.exec()
if __name__ == "__main__":
main()
问题跟踪器中此代码的发布者指出,“溢出”值似乎在 matplotlib 中呈现为白色,而在 pyqtgraph 中呈现为黑色。另外,pyqtgraph图像向左旋转了90度,因为没有设置轴顺序,y轴可能是反转的。
为了获得正确的旋转方向,代码有两行注释
plot.invertY()
和
pg.ImageItem(data, axisOrder='row-major')
希望这对您有所帮助!