Use overlay api to access multi-axes by name

vlm_plotz
Tyler Goodlet 2022-01-21 08:30:00 -05:00
parent d600a2ca70
commit 26327e5462
1 changed files with 35 additions and 30 deletions

View File

@ -479,14 +479,20 @@ class LinkedSplits(QWidget):
axisItems=axes, axisItems=axes,
**cpw_kwargs, **cpw_kwargs,
) )
cpw.hideAxis('left')
cpw.hideAxis('bottom')
if self.xaxis_chart: if self.xaxis_chart:
self.xaxis_chart.hideAxis('bottom')
# presuming we only want it at the true bottom of all charts. # presuming we only want it at the true bottom of all charts.
# XXX: uses new api from our ``pyqtgraph`` fork. # XXX: uses new api from our ``pyqtgraph`` fork.
# https://github.com/pikers/pyqtgraph/tree/plotitemoverlay_onto_pg_master # https://github.com/pikers/pyqtgraph/tree/plotitemoverlay_onto_pg_master
_ = self.xaxis_chart.removeAxis('bottom', unlink=False) # _ = self.xaxis_chart.removeAxis('bottom', unlink=False)
assert 'bottom' not in self.xaxis_chart.plotItem.axes # assert 'bottom' not in self.xaxis_chart.plotItem.axes
self.xaxis_chart = cpw self.xaxis_chart = cpw
cpw.showAxis('bottom')
if self.xaxis_chart is None: if self.xaxis_chart is None:
self.xaxis_chart = cpw self.xaxis_chart = cpw
@ -726,11 +732,6 @@ class ChartPlotWidget(pg.PlotWidget):
self._static_yrange = static_yrange # for "known y-range style" self._static_yrange = static_yrange # for "known y-range style"
self._view_mode: str = 'follow' self._view_mode: str = 'follow'
# show only right side axes
self.hideAxis('left')
self.showAxis('right')
# self.showAxis('left')
# show background grid # show background grid
self.showGrid(x=False, y=True, alpha=0.3) self.showGrid(x=False, y=True, alpha=0.3)
@ -862,55 +863,58 @@ class ChartPlotWidget(pg.PlotWidget):
def overlay_plotitem( def overlay_plotitem(
self, self,
name: str, name: str,
index: Optional[int] = None,
axis_title: Optional[str] = None,
axis_side: str = 'right',
axis_kwargs: dict = {}, axis_kwargs: dict = {},
) -> pg.PlotItem: ) -> pg.PlotItem:
# Custom viewbox impl # Custom viewbox impl
cv = self.mk_vb(name) cv = self.mk_vb(name)
cv.chart = self cv.chart = self
# xaxis = DynamicDateAxis( allowed_sides = {'left', 'right'}
# orientation='bottom', if axis_side not in allowed_sides:
# linkedsplits=self.linked, raise ValueError(f'``axis_side``` must be in {allowed_sides}')
# )
yaxis = PriceAxis( yaxis = PriceAxis(
orientation='right', orientation=axis_side,
linkedsplits=self.linked, linkedsplits=self.linked,
**axis_kwargs, **axis_kwargs,
) )
plotitem = pg.PlotItem( pi = pg.PlotItem(
parent=self.plotItem, parent=self.plotItem,
name=name, name=name,
enableMenu=False, enableMenu=False,
viewBox=cv, viewBox=cv,
axisItems={ axisItems={
# 'bottom': xaxis, # 'bottom': xaxis,
'right': yaxis, axis_side: yaxis,
}, },
default_axes=[], default_axes=[],
) )
# plotitem.setAxisItems( pi.hideButtons()
# add_to_layout=False,
# axisItems={
# 'bottom': xaxis,
# 'right': yaxis,
# },
# )
# plotite.hideAxis('right')
# plotite.hideAxis('bottom')
# plotitem.addItem(curve)
cv.enable_auto_yrange() cv.enable_auto_yrange()
# plotitem.enableAutoRange(axis='y') # compose this new plot's graphics with the current chart's
plotitem.hideButtons() # existing one but with separate axes as neede and specified.
self.pi_overlay.add_plotitem( self.pi_overlay.add_plotitem(
plotitem, pi,
index=index,
# only link x-axes, # only link x-axes,
link_axes=(0,), link_axes=(0,),
) )
return plotitem
# add axis title
# TODO: do we want this API to still work?
# raxis = pi.getAxis('right')
axis = self.pi_overlay.get_axis(pi, axis_side)
axis.set_title(axis_title or name, view=pi.getViewBox())
return pi
def draw_curve( def draw_curve(
self, self,
@ -1016,7 +1020,8 @@ class ChartPlotWidget(pg.PlotWidget):
# add y-axis "last" value label # add y-axis "last" value label
last = self._ysticks[name] = YAxisLabel( last = self._ysticks[name] = YAxisLabel(
chart=self, chart=self,
parent=self.getAxis('right'), # parent=self.getAxis('right'),
parent=self.pi_overlay.get_axis(self.plotItem, 'right'),
# TODO: pass this from symbol data # TODO: pass this from symbol data
digits=digits, digits=digits,
opacity=1, opacity=1,