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