Qt, Python / C++. Как передвинуть точку (0, 0) графика?

Есть график синусоиды. Он расположен вертикально (условно 'книжный формат'), т.е. оси ОХ и ОY поменялись местами.

Теперь надо поменять начало осей, т.е. точку (0, 0) расположить не внизу слева, а в левом верхнем углу.

Ссылка на код на C++

Перевёл на Python, вроде работает. Создано на PySide, это тот же PyQt, полная взаимзаменяемость, при необходимости просто меняете у себя имя одного пакета на другой.

Ответ, по возможности, лучше дать на python, но буду рад любому варианту.

from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
from PySide6.QtCharts import *
from random import randrange
from math import *
import sys
import numpy as np


def random_between(low, high, seed):
    return randrange(100)


class ChartClass(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(600, 1000)
        self.initUI()

    def initUI(self):
        seed = 0
        chart_view = QChartView()
        hlayout = QHBoxLayout()
        hlayout.addWidget(chart_view)
        seed = random_between(0, 100, seed)
        series1 = QLineSeries()
        series2 = QLineSeries()
        k = 0
        while k <= 100:
            series1.append(QPointF(sin((seed + k) * 0.1), k))
            series2.append(QPointF(sin((seed + k) * 0.05), k))
            k += 1
        chart = QChart()
        chart.addSeries(series1)
        chart.addSeries(series2)
        axisX = QValueAxis()
        axisX.setTitleText("x, м")
        axisX.setLabelFormat("%i")
        axisX.setTickCount(1)
        chart.addAxis(axisX, Qt.AlignmentFlag.AlignBottom)
        axisY = QValueAxis()
        axisY.setTitleText("t, мс")
        axisY.setLabelFormat("%g")
        axisY.setTickCount(5)
        chart.addAxis(axisY, Qt.AlignmentFlag.AlignLeft)
        series1.attachAxis(axisX)
        series1.attachAxis(axisY)
        series2.attachAxis(axisX)
        series2.attachAxis(axisY)
        chart_view.setChart(chart)
        self.setLayout(hlayout)


if __name__ == "__main__":
    app = QApplication([])
    window = ChartClass()
    window.show()
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

Я не уверен, что правильно понимаю вас, но попробуйте:

    ...
        axisY.setRange(-100, 0)
    ...

import sys
import numpy as np
from random import randrange
from math import *
'''
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
from PySide6.QtCharts import *
'''
from PyQt5.Qt import *
from PyQt5.QtChart import *


def random_between(low, high, seed):
    return randrange(100)


class ChartClass(QWidget):
    def __init__(self):
        super().__init__()
        
#        self.resize(600, 1000)
        self.resize(600, 500)
        
        self.initUI()

    def initUI(self):
        seed = 0
        chart_view = QChartView()
        hlayout = QHBoxLayout()
        hlayout.addWidget(chart_view)
        seed = random_between(0, 100, seed)
        series1 = QLineSeries()
        series2 = QLineSeries()
        
#        k = 0
#        while k <= 100:
# !!! +++
        k = -100                                                       # !!! +++
        while k <= 0:                                                  # !!! +++
        
            series1.append(QPointF(sin((seed + k) * 0.1), k))
            series2.append(QPointF(sin((seed + k) * 0.05), k))
            k += 1
            
        chart = QChart()
        chart.addSeries(series1)
        chart.addSeries(series2)
        axisX = QValueAxis()
        axisX.setTitleText("x, м")
        axisX.setLabelFormat("%i")
        axisX.setTickCount(1)
        chart.addAxis(axisX, Qt.AlignmentFlag.AlignBottom)
        axisY = QValueAxis()
        axisY.setTitleText("t, мс")
        axisY.setLabelFormat("%g")
        axisY.setTickCount(5)
        chart.addAxis(axisY, Qt.AlignmentFlag.AlignLeft)
        series1.attachAxis(axisX)
        series1.attachAxis(axisY)
        series2.attachAxis(axisX)
        series2.attachAxis(axisY)
        
# !!! +++        
        axisY.setRange(-100, 0)                                    # !!! +++
        
        chart_view.setChart(chart)
        self.setLayout(hlayout)


if __name__ == "__main__":
    app = QApplication([])
    window = ChartClass()
    window.show()
    sys.exit(app.exec())

введите сюда описание изображения

→ Ссылка