Сохранить разметку графика QChart при изменении габаритов в PySide\PyQt
При изменении масштаба либо недостатке места разметка на осях схлопыватся и превращается в многоточие.
Можно ли переопределить это поведение? Очень надо сохранить видимую разметку, пусть даже числа будут расположены совсем тесно или наползать друг на друга.
Минимальный воспроизводимый пример:
import sys
from PySide6.QtCore import QPointF, Qt, QMargins
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout
from PySide6.QtCharts import QChartView, QChart, QLineSeries, QAreaSeries
from PySide6.QtGui import QGradient, QPen, QLinearGradient, QPainter
import math
class TestChart(QWidget):
def __init__(self):
super().__init__()
self.series_0 = QLineSeries()
self.series_1 = QLineSeries()
for i in range(0, 100, 1):
self.series_0.append([QPointF(i, math.cos(i * 0.1))])
self.series_1.append(QPointF(0, 0))
self.series_1.append(QPointF(100, 0))
self.series = QAreaSeries(self.series_0, self.series_1)
gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1))
gradient.setColorAt(0.0, 0x3cc63c)
gradient.setColorAt(1.0, 0x26f626)
gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
self.series.setBrush(gradient)
#
self.chart = QChart()
self.chart.addSeries(self.series)
self.chart.legend().hide()
self.chart.createDefaultAxes()
self.chart.setMargins(QMargins(0,0,0,0))
_chart_view = QChartView(self.chart)
_chart_view.setRenderHint(QPainter.Antialiasing)
vbox = QVBoxLayout()
vbox.addWidget(_chart_view)
self.setLayout(vbox)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TestChart()
window.show()
window.resize(400, 300)
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: Garp
→ Ссылка
Уменьшаем размер шрифта на нужной оси.
В коде ниже для осей QValueAxis
, для createDefaultAxes
будет что-то типа self.chart.AxisY().setPixelSize(5)
.
font_axis_y = QFont()
font_axis_y.setPixelSize(5)
font_axis_y.setPointSize(5)
self.y_axis.setLabelsFont(font_axis_y)