Hello,

In my program, I'd like the user to be able to choose whether lines are 
plotted or not. I do this with a button which the user can click for each 
line to show or hide that line. If the user chooses to hide the line, the 
pen gets set to None.

I'm using multiple axes for this plot, and I'd like the axes to disappear 
if the user is not displaying the line shown on a particular axis. I'm 
using a variant of the example code shown 
at 
https://github.com/pyqtgraph/pyqtgraph/blob/master/examples/MultiplePlotAxes.py.

For the "regular" right-y-axis (p2), it's easier to hide and re-show the 
axis with `p1.showAxis('right', show=False)` and `p1.showAxis('right', 
show=True)`. However, for the addition right-y-axis (p3), I'm having 
trouble figuring out how to do this. In theory, I should be able to do 
`p1.layout.removeItem(ax3)` and then `p1.layout.addItem(ax3, 2, 3)`. 
However, when I "remove" the axis, it doesn't get removed, but rather gets 
moved over to the top-left of the plot.

Any idea what's going on? My code is below. I just took the code at 
https://github.com/pyqtgraph/pyqtgraph/blob/master/examples/MultiplePlotAxes.py 
and added the removal of the axes to make it as simple as possible to debug.

Thanks.

Efrem Braun


```

import pyqtgraph as pg

from pyqtgraph.Qt import QtCore, QtGui

import numpy as np


pg.mkQApp()


pw = pg.PlotWidget()

pw.show()

pw.setWindowTitle('pyqtgraph example: MultiplePlotAxes')

p1 = pw.plotItem

p1.setLabels(left='axis 1')


## create a new ViewBox, link the right axis to its coordinate system

p2 = pg.ViewBox()

p1.showAxis('right')

p1.scene().addItem(p2)

p1.getAxis('right').linkToView(p2)

p2.setXLink(p1)

p1.getAxis('right').setLabel('axis2', color='#0000ff')


## create third ViewBox. 

## this time we need to create a new axis as well.

p3 = pg.ViewBox()

ax3 = pg.AxisItem('right')

p1.layout.addItem(ax3, 2, 3)

p1.scene().addItem(p3)

ax3.linkToView(p3)

p3.setXLink(p1)

ax3.setZValue(-10000)

ax3.setLabel('axis 3', color='#ff0000')



## Handle view resizing 

def updateViews():

    ## view has resized; update auxiliary views to match

    global p1, p2, p3

    p2.setGeometry(p1.vb.sceneBoundingRect())

    p3.setGeometry(p1.vb.sceneBoundingRect())


    ## need to re-update linked axes since this was called

    ## incorrectly while views had different shapes.

    ## (probably this should be handled in ViewBox.resizeEvent)

    p2.linkedViewChanged(p1.vb, p2.XAxis)

    p3.linkedViewChanged(p1.vb, p3.XAxis)


updateViews()

p1.vb.sigResized.connect(updateViews)



p1.plot([1,2,4,8,16,32])

p2.addItem(pg.PlotCurveItem([10,20,40,80,40,20], pen='b'))

p3.addItem(pg.PlotCurveItem([3200,1600,800,400,200,100], pen='r'))


p1.showAxis('right', show=False) # My code modification

#p1.showAxis('right', show=True) # My code modification


p1.layout.removeItem(ax3) # My code modification

#p1.layout.addItem(ax3, 2, 3) # My code modification


## 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_()
```

-- 
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/99abb140-75f4-43fe-84cd-515253c83463n%40googlegroups.com.

Reply via email to