Hopefully fix datum offset on signal sub-plots
Added a comment to clarify, ish. Add `ChartPlotWidget._overlays` as registry of curves added on top of main graphics. Hackishly (ad-hoc-ishly?) update the curve assuming the data resides in the same `._array` for now (which it does for historical vwap).bar_select
parent
2cc2b32805
commit
07beec59bf
|
@ -288,6 +288,7 @@ class ChartPlotWidget(pg.PlotWidget):
|
||||||
)
|
)
|
||||||
self._array = array # readonly view of data
|
self._array = array # readonly view of data
|
||||||
self._graphics = {} # registry of underlying graphics
|
self._graphics = {} # registry of underlying graphics
|
||||||
|
self._overlays = {} # registry of overlay curves
|
||||||
self._labels = {} # registry of underlying graphics
|
self._labels = {} # registry of underlying graphics
|
||||||
self._ysticks = {} # registry of underlying graphics
|
self._ysticks = {} # registry of underlying graphics
|
||||||
self._yrange = yrange
|
self._yrange = yrange
|
||||||
|
@ -317,7 +318,7 @@ class ChartPlotWidget(pg.PlotWidget):
|
||||||
vb.sigResized.connect(self._set_yrange)
|
vb.sigResized.connect(self._set_yrange)
|
||||||
|
|
||||||
def _update_contents_label(self, index: int) -> None:
|
def _update_contents_label(self, index: int) -> None:
|
||||||
if index > 0 and index < len(self._array):
|
if index >= 0 and index < len(self._array):
|
||||||
for name, (label, update) in self._labels.items():
|
for name, (label, update) in self._labels.items():
|
||||||
update(index)
|
update(index)
|
||||||
|
|
||||||
|
@ -421,7 +422,7 @@ class ChartPlotWidget(pg.PlotWidget):
|
||||||
|
|
||||||
# register overlay curve with name
|
# register overlay curve with name
|
||||||
if not self._graphics and name is None:
|
if not self._graphics and name is None:
|
||||||
name = 'a_line_bby'
|
name = 'a_stupid_line_bby'
|
||||||
|
|
||||||
self._graphics[name] = curve
|
self._graphics[name] = curve
|
||||||
|
|
||||||
|
@ -431,12 +432,13 @@ class ChartPlotWidget(pg.PlotWidget):
|
||||||
size='4pt',
|
size='4pt',
|
||||||
)
|
)
|
||||||
label.setParentItem(self._vb)
|
label.setParentItem(self._vb)
|
||||||
|
|
||||||
if overlay:
|
if overlay:
|
||||||
# position bottom left if an overlay
|
# position bottom left if an overlay
|
||||||
label.anchor(itemPos=(0, 1), parentPos=(0, 1), offset=(0, 25))
|
label.anchor(itemPos=(0, 1), parentPos=(0, 1), offset=(0, 25))
|
||||||
|
self._overlays[name] = curve
|
||||||
|
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
self.scene().addItem(label)
|
self.scene().addItem(label)
|
||||||
|
|
||||||
def update(index: int) -> None:
|
def update(index: int) -> None:
|
||||||
|
@ -637,6 +639,7 @@ async def add_new_bars(delay_s, linked_charts):
|
||||||
diff = time.time() - start
|
diff = time.time() - start
|
||||||
print(f'array append took {diff}')
|
print(f'array append took {diff}')
|
||||||
|
|
||||||
|
|
||||||
# TODO: generalize this increment logic
|
# TODO: generalize this increment logic
|
||||||
for name, chart in linked_charts.subplots.items():
|
for name, chart in linked_charts.subplots.items():
|
||||||
data = chart._array
|
data = chart._array
|
||||||
|
@ -666,6 +669,15 @@ async def add_new_bars(delay_s, linked_charts):
|
||||||
# resize view
|
# resize view
|
||||||
price_chart._set_yrange()
|
price_chart._set_yrange()
|
||||||
|
|
||||||
|
for name, curve in price_chart._overlays.items():
|
||||||
|
# TODO: standard api for signal lookups per plot
|
||||||
|
if name in price_chart._array.dtype.fields:
|
||||||
|
# should have already been incremented above
|
||||||
|
price_chart.update_from_array(
|
||||||
|
name,
|
||||||
|
price_chart._array[name],
|
||||||
|
)
|
||||||
|
|
||||||
for name, chart in linked_charts.subplots.items():
|
for name, chart in linked_charts.subplots.items():
|
||||||
chart.update_from_array(chart.name, chart._array)
|
chart.update_from_array(chart.name, chart._array)
|
||||||
chart._set_yrange()
|
chart._set_yrange()
|
||||||
|
@ -835,21 +847,9 @@ async def chart_from_fsp(
|
||||||
# receive processed historical data-array as first message
|
# receive processed historical data-array as first message
|
||||||
history = (await stream.__anext__())
|
history = (await stream.__anext__())
|
||||||
|
|
||||||
# TODO: enforce type checking here
|
# TODO: enforce type checking here?
|
||||||
newbars = np.array(history)
|
newbars = np.array(history)
|
||||||
|
|
||||||
# XXX: hack to get curves aligned with bars graphics: prepend a copy of
|
|
||||||
# the first datum..
|
|
||||||
# TODO: talk to ``pyqtgraph`` core about proper way to solve
|
|
||||||
newbars = np.append(
|
|
||||||
np.array(newbars[0], dtype=newbars.dtype),
|
|
||||||
newbars
|
|
||||||
)
|
|
||||||
newbars = np.append(
|
|
||||||
np.array(newbars[0], dtype=newbars.dtype),
|
|
||||||
newbars
|
|
||||||
)
|
|
||||||
|
|
||||||
chart = linked_charts.add_plot(
|
chart = linked_charts.add_plot(
|
||||||
name=func_name,
|
name=func_name,
|
||||||
array=newbars,
|
array=newbars,
|
||||||
|
@ -857,16 +857,26 @@ async def chart_from_fsp(
|
||||||
|
|
||||||
# check for data length mis-allignment and fill missing values
|
# check for data length mis-allignment and fill missing values
|
||||||
diff = len(chart._array) - len(linked_charts.chart._array)
|
diff = len(chart._array) - len(linked_charts.chart._array)
|
||||||
if diff < 0:
|
if diff <= 0:
|
||||||
data = chart._array
|
data = chart._array
|
||||||
chart._array = np.append(
|
chart._array = np.append(
|
||||||
data,
|
data,
|
||||||
np.full(abs(diff), data[-1], dtype=data.dtype)
|
np.full(abs(diff), data[-1], dtype=data.dtype)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# XXX: hack to get curves aligned with bars graphics: prepend
|
||||||
|
# a copy of the first datum..
|
||||||
|
# TODO: talk to ``pyqtgraph`` core about proper way to solve this
|
||||||
|
data = chart._array
|
||||||
|
chart._array = np.append(
|
||||||
|
np.array(data[0], dtype=data.dtype),
|
||||||
|
data,
|
||||||
|
)
|
||||||
|
|
||||||
value = chart._array[-1]
|
value = chart._array[-1]
|
||||||
last_val_sticky = chart._ysticks[chart.name]
|
last_val_sticky = chart._ysticks[chart.name]
|
||||||
last_val_sticky.update_from_data(-1, value)
|
last_val_sticky.update_from_data(-1, value)
|
||||||
|
chart.update_from_array(chart.name, chart._array)
|
||||||
|
|
||||||
chart._set_yrange(yrange=(0, 100))
|
chart._set_yrange(yrange=(0, 100))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue