Well, it's a silly workaround, but adding:

```

ax3.setPen(None)

ax3.showLabel(False)

ax3.style['showValues'] = False

```
after removing the ax3 item does hide the axis from view. There should 
definitely be a more elegant solution though.

Efrem Braun
On Monday, January 25, 2021 at 12:31:03 PM UTC-5 Efrem Braun wrote:

> 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/029671dc-12b4-4074-9f99-cf627de7fbe3n%40googlegroups.com.

Reply via email to