Как я могу добавить перекрестные метки на осях моего графика свечей pyqtgraph? - PullRequest
0 голосов
/ 13 марта 2020

Я хотел бы добавить метки перекрестия на осях, как показано на рисунке ниже

График подсвечника

Слева от цены есть ось цены. виджет графика и ось времени внизу. Я много искал, но не смог найти примеров. На изображении выше вы заметите, что рядом с осью 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

...