Графический интерфейс PyQt5 с графиком PyQtGraph: отображение оси Y справа

Я создаю графический интерфейс PyQt5 и использую PyQtGraph для построения некоторых данных. Вот минимальный, полный, проверяемый пример сценария, который очень похож на структуру, которая у меня есть.

import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout, QApplication)
import pyqtgraph as pg
from pyqtgraph import QtCore, QtGui

class CustomPlot(pg.GraphicsObject):
    def __init__(self, data):
        pg.GraphicsObject.__init__(self)
        self.data = data
        print(self.data)
        self.generatePicture()

    def generatePicture(self):
        self.picture = QtGui.QPicture()
        p = QtGui.QPainter(self.picture)
        p.setPen(pg.mkPen('w', width=1/2.))
        for (t, v) in self.data:
            p.drawLine(QtCore.QPointF(t, v-2), QtCore.QPointF(t, v+2))
        p.end()

    def paint(self, p, *args):
        p.drawPicture(0, 0, self.picture)

    def boundingRect(self):
        return QtCore.QRectF(self.picture.boundingRect())


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

    def initUI(self):
        self.guiplot = pg.PlotWidget()
        layout = QGridLayout(self)
        layout.addWidget(self.guiplot, 0,0)

    def simpleplot(self):
        data = [
            (1., 10),
            (2., 13),
            (3., 17),
            (4., 14),
            (5., 13),
            (6., 15),
            (7., 11),
            (8., 16)
        ]
        pgcustom = CustomPlot(data)
        self.guiplot.addItem(pgcustom)

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

Это создает график, который выглядит как введите здесь описание изображения

Ось Y находится слева от графика, но я хотел бы переместить ее вправо. Я пробовал несколько вещей, но не могу найти объект (QtGui.QPainter, GraphicObject и т. д.), у которого есть возможность или метод для достижения этого.


person Spinor8    schedule 21.08.2017    source источник


Ответы (1)


Его можно задать методами класса PlotItem.

def initUI(self):
    self.guiplot = pg.PlotWidget()
    plotItem = self.guiplot.getPlotItem()
    plotItem.showAxis('right')
    plotItem.hideAxis('left')

Если вы не читали раздел Организация занятий по черчению, посмотри на это. В частности, в отношениях между классами PlotWidet и PlotItem.

person titusjan    schedule 22.08.2017
comment
Спасибо за чаевые. Я просмотрел учебники PyQt5 и прочитал соответствующую документацию для PyQtGraph, но пропустил упомянутый вами раздел, - person Spinor8; 22.08.2017