Я хотел бы добавить метки перекрестия на осях, как показано на рисунке ниже
График подсвечника
Слева от цены есть ось цены. виджет графика и ось времени внизу. Я много искал, но не смог найти примеров. На изображении выше вы заметите, что рядом с осью y также есть метка «+», то есть кнопка pu sh, связанная с перекрестием. Было бы неплохо добавить его. Я прошу прощения за плохое форматирование: это мой первый вопрос. Заранее благодарим за любую помощь
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setWindowTitle("Candlestick")
self.resize(600, 500)
def __init__(self):
QWidget.__init__(self)
self.setWindowTitle("Candlestick")
self.resize(600, 500)
date_axis = TimeAxisItem(orientation='bottom')
self.graphWidget = pg.PlotWidget(axisItems={'bottom': date_axis})
self.crossHair()
layout = QGridLayout(self)
layout.addWidget(self.graphWidget)
self.df = self.getData()
self.ohlc = self.ohlcData()
self.plotStyle()
self.drawChart()
def getData(self):
l = ibutil.LdIbUtil()
ib_csv = 'C:\\Users\\LUD\\CLJ2020_FUT.CSV'
df = pd.read_csv(ib_csv)
df = df.set_index(pd.DatetimeIndex(df['date']))
df= df.drop(['date','Unnamed: 0'], axis=1)
return df
def ohlcData(self):
df = self.df.copy()
df.reset_index(level=0, inplace=True)
df['date'] = df.date.astype('int64') // 10**9
ohlc = [tuple(x) for x in df[['date', 'open', 'high', 'low', 'close']].to_records(index=False)]
return ohlc
def drawChart(self):
ohlc = lpg.CandlestickChart(self.ohlc)
self.graphWidget.addItem(ohlc)
def crossHair(self):
self.vLine = pg.InfiniteLine(angle=90, movable=False,)
self.hLine = pg.InfiniteLine(angle=0, movable=False)
self.crosshairText = pg.TextItem()
self.h_arrow = pg.ArrowItem(angle=0)
self.graphWidget.addItem(self.vLine, ignoreBounds=True)
self.graphWidget.addItem(self.hLine, ignoreBounds=True)
self.graphWidget.addItem(self.crosshairText, ignoreBounds=True)
self.proxy = pg.SignalProxy(self.graphWidget.scene().sigMouseMoved,
rateLimit=60, slot=self.mouseMoved)
def mouseMoved(self, evt):
pos = evt[0]
if not self.graphWidget.sceneBoundingRect().contains(pos):
return
mousePoint = self.graphWidget.plotItem.vb.mapSceneToView(pos)
xAxis = mousePoint.x()
yAxis = mousePoint.y()
self.vLine.setPos(xAxis)
self.hLine.setPos(yAxis)
price = '<div style="text-align: center">\
<span style="color: red; font-size: 10pt;">\
%0.2f\
</span>\
</div>'\
% (yAxis)
self.crosshairText.setHtml(price)
self.crosshairText.setPos(mousePoint.x(), mousePoint.y())
def plotStyle(self):
self.graphWidget.showAxis('right')
self.graphWidget.plotItem.hideAxis('left')
self.graphWidget.showAxis('bottom')
self.graphWidget.showGrid(x=True, y=True)
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [datetime.fromtimestamp(value).strftime("%d-%m") for value in values]
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
График подсвечника: customGraphicsItem.py