如何在pyqtgraph中设置刻度线

时间:2018-12-05 09:43:10

标签: python pyqt5 pyqtgraph

我想在pyqtgraph.PlotWidget()中显示多通道数据。但是,当设置AxisItem()的yRange时,刻度会自动更改。就是这样:

import pyqtgraph as pg
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('PyqtLib')
        self.setFixedSize(1000, 800)

        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')
        layout = QHBoxLayout(self)

        self.graph_show = pg.PlotWidget()
        layout.addWidget(self.graph_show)
        self.graph_show.setRange(yRange = (0, 5), xRange = (0, 10), disableAutoRange=True)
        self.graph_show.invertY()
        for i in range(1, 10):
            self.graph_show.addLine(x=i, pen='k')

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

但是当给定yRange =(0,5)时,刻度将自动设置为[0,1,2,3,4,5]。但我希望ytick为[0、0.5、1、1.5、2、2.5、3、3.5、4、4.5、5]。 在matplotlib中,我可以轻松地使用以下方法更改刻度:

import matplotlib.pyplot as plt
plt.yticks([0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5])

但是我无法更改pyqtgraph中的刻度。那么如何使用pyqtgraph做到这一点呢?

1 个答案:

答案 0 :(得分:0)

您必须使用getAxis()方法并传递位置'left'以获得左轴,并使用setTicks()方法设置刻度,您必须传递一个元组列表列表,其中每个元组在位置和对应的字符串之间具有对应关系:

from PyQt5 import QtCore, QtWidgets
import pyqtgraph as pg


class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('PyqtLib')
        self.setFixedSize(640, 480)

        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')
        layout = QtWidgets.QHBoxLayout(self)

        self.graph_show = pg.PlotWidget()
        layout.addWidget(self.graph_show)
        self.graph_show.setRange(yRange = (0, 5), xRange = (0, 10), disableAutoRange=True)
        self.graph_show.invertY()
        for i in range(1, 10):
            self.graph_show.addLine(x=i, pen='k')

        ay = self.graph_show.getAxis('left')
        ticks = [0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
        ay.setTicks([[(v, str(v)) for v in ticks ]])


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

enter image description here