PyQt\PySide Форматирование меток графика

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

На картинке мы видим два графика (на самом деле их больше, но для иллюстрации достаточно двух), расположенных вертикально.
На эти графики поступают разные данные в разных диапазонов, поэтому диапазоны значений по OY в каждый момент времени иногда сильно различаются. \

Разные значения забирают себе разное место, сдвигая вертикальную ось вправо, что видно на картинке.
По некоторым причинам важно, чтобы этого не происходило, и чтобы на всех графиках в каждый момент времени оси OY располагались строго друг над другом.

Сделать это можно через форматирование данных, которые поступают в качестве меток оси. Формат меток графика должен быть '4 знака с выравниванием вправо',
т.к. ожидаются целые числа от -999 до 999.
На питоне это выглядит так print("{:4d}".format(123)).

Как это применить для оси графика? Пытаюсь через axisY.setLabelFormat(), но не заходит.

from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
import sys
import math


class Chart(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.data = [math.sin(i * 0.1) for i in range(0, 1000, 1)]
        self.series = QLineSeries()
        for i in range (0, 1000, 1):
            self.series.append(i, self.data[i])
        self.axisX = QValueAxis()
        self.axisY = QValueAxis()
        self.chart = QChart()
        self.chart.addSeries(self.series)
        self.chart.legend().setVisible(False)
        #
        self.axisX.setLabelFormat("%d")
        self.axisY.setLabelFormat("%d")      #  !?
        #
        self.chart.setAxisX(self.axisX)
        self.chart.setAxisY(self.axisY)
        self.chart.axisY().setRange(-2, 2)
        self.chart.axisX().setRange(0, 1000)
        self.series.attachAxis(self.axisX)
        self.series.attachAxis(self.axisY)
        self.chart.legend().setVisible(False)
        self.chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chart_view)
        self.setLayout(vbox)


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

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

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

Попробуйте заменить

        self.axisY.setLabelFormat("%d")

на

        self.axisY.setLabelFormat("%.3d")

main.py

'''
from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
'''
import sys
import math
from PyQt5.Qt import *
from PyQt5.QtChart import QLineSeries, QChart, QChartView, QValueAxis


class Chart(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.data = [math.sin(i * 0.1) for i in range(0, 1000, 1)]
        self.series = QLineSeries()
        for i in range (0, 1000, 1):
            self.series.append(i, self.data[i])
        self.axisX = QValueAxis()
        self.axisY = QValueAxis()
        self.chart = QChart()
        self.chart.addSeries(self.series)
        self.chart.legend().setVisible(False)
        #
        self.axisX.setLabelFormat("%d")

####### self.axisY.setLabelFormat("%d")                    #  !?
        self.axisY.setLabelFormat("%.3d")                  # <----------

        #
        self.chart.setAxisX(self.axisX)
        self.chart.setAxisY(self.axisY)
        self.chart.axisY().setRange(-2, 2)            #  (-2, 2)
        self.chart.axisX().setRange(0, 330)           #  (0, 1000) 
        self.series.attachAxis(self.axisX)
        self.series.attachAxis(self.axisY)
        self.chart.legend().setVisible(False)
        self.chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chart_view)
        self.setLayout(vbox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart()
    window.resize(600, 400)
    window.show()
    sys.exit(app.exec())

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

→ Ссылка