首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyqtgraph中的matplotlib.pyplot.clim对应物

pyqtgraph中的matplotlib.pyplot.clim对应物
EN

Stack Overflow用户
提问于 2021-09-28 19:13:14
回答 1查看 188关注 0票数 1

我只想将色彩映射表(“热”)应用于图像的特定范围的值。我已经在matplotlib.pyplot.clim中了解了这个功能,您必须指定缩放的最小值和最大值。据我所知,您应该使用setLevels(min,max)来完成此任务。我已经包含了一个最小的例子,它表明不幸的是这两种表示不是等价的。

代码语言:javascript
复制
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的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-01 17:29:30

这个问题出现在pyqtgraph的问题跟踪器上:https://github.com/pyqtgraph/pyqtgraph/pull/1985#issuecomment-932223288

下面是在两个库之间生成相同结果的一些代码

代码语言:javascript
复制
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中,"overflow“值似乎呈现为白色,而在pyqtgraph中呈现为黑色。此外,由于未设置轴顺序并且y轴可能颠倒,因此pyqtgraph图像向左旋转了90度。

为了获得正确的旋转方向,代码有两行说明

代码语言:javascript
复制
plot.invertY()

代码语言:javascript
复制
pg.ImageItem(data, axisOrder='row-major')

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69367352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档