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())