我想使用特定的颜色图(LUT)使用pg.ImageItem显示2D数组,并在其附近添加一个pg.HistogramLUTItem进行交互式分析。如果我初始化通过LUT传递的图像,然后将其绘制在窗口中,则一切正常。但是,当我创建pg.HistogramLUTItem并用我的图像对其进行初始化时,图像的颜色图立即变为直方图的颜色图。如何在直方图中设置适当的颜色图?
这是我的最小示例:
import numpy as np
import pyqtgraph as pg
myLUT = np.array([[1. , 1. , 1. ],
[0.38401946, 0.48864573, 0.963664 ],
[0.28766167, 0.81375253, 0.49518645],
[0.71970558, 0.92549998, 0.34362429]]) * 255
win = pg.GraphicsLayoutWidget()
win.show()
p1 = win.addPlot()
img = pg.ImageItem(np.random.rand(100, 100), lut=myLUT)
p1.addItem(img)
hist = pg.HistogramLUTItem()
hist.setImageItem(img)
...,此处图像已更改为直方图的“默认”有效值。
我希望直方图“继承”图像的LUT并自动在颜色栏中采用LookUpTable,但实际上是相反的方式。
如何纠正这种行为?我必须使用myLUT初始化直方图吗?我看不到该怎么做。
我不认为可以做到(但是如果有人可以证明我错了,请让我知道...)
我认为问题是HistogramLUTItem
使用GradientEditorItem
创建查找表。此类通过对几个设置点(颜色条旁的彩色三角形)进行线性插值来创建LUT。 GradientEditorItem
无法处理任意LUT,因此HistogramLUTItem
类也不能。
HistogramLUTItem
的源代码似乎证实了这一点。例如。正如您已经怀疑的那样,在setImageItem
方法中,它将imageItem的LUT设置为渐变编辑器的LUT。 Line 147调用img.setLookupTable(self.getLookupTable)
,后者依次获取GradientEditorItem的查找表,即self.lut = self.gradient.getLookupTable(n, alpha=alpha)
上的line 178。
我制作了自己的颜色条类,它可以处理任意查找表:PgColorBar。随时使用它。或者您可以创建一个PyQtGraph问题here。