Hi,

You can display whatever you like in the InfLineLabels, you would just need 
to manually connect to the InfiniteLine move signal. The code from this 
question is pretty close:

https://groups.google.com/d/msg/pyqtgraph/HU4GsfzAxXU/uEAo9lwICwAJ

I think what you want would look something like this (paste in after 
lr.lines[1].label ... line from above):
lr.lines[0].sigPositionChanged.connect(lambda: line_changed(lr.lines[0]))
lr.lines[1].sigPositionChanged.connect(lambda: line_changed(lr.lines[1]))

# Pretend this is your list of y labels
yticks = [[(v, "abcdefghijh"[i]) for i, v in enumerate(np.arange(0, 1.1, 0.1
))]]
pl.getAxis("left").setTicks(yticks)

def line_changed(line):
    ytick_values = np.array(yticks)[0,:,0].astype(np.float64)
    ytick_labels = np.array(yticks)[0,:,1]
    # Get label of tick closest to line position
    line.label.setText(ytick_labels[np.argmin(np.abs(ytick_values - line.
getPos()[1]))])
line_changed(lr.lines[0])
line_changed(lr.lines[1])

Patrick


On Tuesday, 22 January 2019 10:01:25 UTC+10:30, Greydon Gilmore wrote:
>
> Hi Patrick,
>
> This solution works well. I really like the floating text that moves along 
> with the lines. 
>
> I am curious to know if there is a way to display the y-axis labels 
> instead of the raw position? 
>
> I passed a tuple array to setTicks to modify the tick labels. I would want 
> to be able to show these values in the Infiniteline text.
>
> yticks=list()
> for i in dataFinal:
>     pl.plot(i + count)
>     yticks.append((count, depths[plotCount]))
>     count +=120
>     plotCount += 1
> ay=pl.getAxis('left')
> ay.setTicks([yticks])
>
> Where dataFinal is a list of Numpy arrays containing the raw data
>
> Thank you! 
>
> Greydon
>
> On Wednesday, January 16, 2019 at 10:57:18 PM UTC-5, Patrick wrote:
>>
>> Hi,
>>
>> I think what you are asking is you'd like the label text to always remain 
>> inside the region, rather than being at a fixed point. So use the SetPos 
>> method (it's inherited from QGraphicsItem) to move it on update.
>>
>> Also, here's an example with couple of other ideas: why not update the 
>> label whenever the region is changed? 
>>
>> import sys
>> from PyQt5 import QtCore, QtGui, QtWidgets
>> import numpy as np
>> import pyqtgraph as pg
>> from pyqtgraph.graphicsItems.InfiniteLine import InfLineLabel
>>
>> app = QtWidgets.QApplication(sys.argv)
>>
>> my_data = np.random.random(10)
>>
>> win = pg.GraphicsWindow()
>> pl = win.addPlot(row=1, col=0)
>> pl.plot(my_data)
>> ti = pg.TextItem('', anchor=(0,1.1), color=(146, 146, 146), fill='w')
>> pl.addItem(ti)
>> lr = pg.LinearRegionItem(orientation=pg.LinearRegionItem.Horizontal)
>> pl.addItem(lr)
>>
>> # Here's another idea:
>> # Add the value label functionality to the InfiniteLine components of the 
>> LinearRegionItem
>> lr.lines[0].label = InfLineLabel(lr.lines[0], text="{value:0.3f}")
>> lr.lines[1].label = InfLineLabel(lr.lines[1], text="{value:0.3f}")
>>
>> def update_regiontext():
>>     lo,hi = lr.getRegion()
>>     ti.setText("{:0.3f} {:0.3f}".format(lo, hi))
>>     ti.setPos(0, lo)
>>
>> update_regiontext()
>>
>> # If you really want to only update on click then uncomment code below
>> # def on_click(ev):
>> #     if (ev.button() == QtCore.Qt.LeftButton):
>> #         update_regiontext()
>> #         ev.accept()
>> # pl.vb.mouseClickEvent = on_click
>>
>> # Otherwise, this will update whenever the region is changed
>> lr.sigRegionChanged.connect(update_regiontext)
>>
>> win.show()
>> sys.exit(app.exec_())
>>
>>
>> Patrick
>>
>>
>> On Thursday, 17 January 2019 06:26:27 UTC+10:30, Greydon Gilmore wrote:
>>>
>>> Hello,
>>>
>>> I am using pg.LinearRegionItem to select an area on the plot. 
>>> Once I have selected the area I have set up a mouse event, that when 
>>> left button is clicked the region borders will be displayed using 
>>> pg.TextItem. 
>>>
>>> However, I want to be able to replace the pg.TextItem is the 
>>> LinearRegionItem is changed and a new mouse click is detected
>>>
>>> win = pg.GraphicsWindow()
>>> pl = win.addPlot(row=1, col=0)
>>> pl.plot(my_data)
>>> lr = pg.LinearRegionItem(orientation=pg.LinearRegionItem.Horizontal)
>>> pl.addItem(lr)
>>>
>>> def on_click(ev):
>>>     if (ev.button() == QtCore.Qt.LeftButton):
>>>     lo,hi = lr.getRegion()
>>>     print (lo,hi)
>>>     ti = pg.TextItem('', anchor=(0,1.1), color=(146, 146, 146), fill='w')
>>>     pl.addItem(ti)
>>>     ti.setText(str(round(lo,3))+ ' ' + str(round(hi,3)))
>>>     ev.accept()
>>>
>>> pl.vb.mouseClickEvent = on_click
>>>
>>> Any help would be appreciated!
>>>
>>> Greydon
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/cea98daf-b7fd-408b-9453-2dea9d312cff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to