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 шт):
Попробуйте заменить
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())

