Как нанести свои кастомные метки (ticks) на ось графика QChart?

Есть график в виде прямой линии, параллельной оси OX.
Как задать на оси OY точку их пересечения и ещё пару своих точек, например (0, 3) и (0, 17).
'Задать' т.е. указать в виде тиков на оси.

from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication, QHBoxLayout
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
from PySide6.QtGui import Qt, QPen, QBrush
from PySide6.QtCore import Qt, QCoreApplication
import sys


class ChartWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(700, 500)
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.y_axis = QValueAxis()
        self.y_axis.setRange(0, 20)
        self.y_axis.setLabelFormat("%d")
        self.y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.y_axis.setTickInterval(5)
        self.x_axis = QValueAxis()
        self.x_axis.setRange(0, 100)
        self.x_axis.setLabelFormat("%d")
        self.x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.x_axis.setTickInterval(10)
        self.chart.addAxis(self.x_axis, Qt.AlignmentFlag.AlignBottom)
        self.chart.addAxis(self.y_axis, Qt.AlignmentFlag.AlignLeft)
        self.series = QLineSeries()
        for i in range(0, 100, 1):
            self.series.append(i, 12)
        self.series.setPen(QPen(Qt.GlobalColor.red, 3))
        self.chart.addSeries(self.series)
        self.series.attachAxis(self.x_axis)
        self.series.attachAxis(self.y_axis)
        chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(chart_view)
        self.setLayout(vbox)


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


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

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

Попробуйте так:

import sys
'''
from PySide6.QtWidgets import QWidget, QVBoxLayout, \
    QApplication, QHBoxLayout
from PySide6.QtCharts import QLineSeries, QChart, \
    QChartView, QValueAxis
from PySide6.QtGui import Qt, QPen, QBrush
from PySide6.QtCore import Qt, QCoreApplication
'''
from PyQt5.Qt import *
from PyQt5.QtChart import *


class ChartWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(900, 650)
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.chart.setAnimationOptions(QChart.SeriesAnimations)
        self.chart.setTheme(QChart.ChartThemeBlueCerulean)
        
        self.y_axis = QValueAxis()
        self.y_axis.setRange(0, 20)
        self.y_axis.setLabelFormat("%d")
        self.y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.y_axis.setTickInterval(5) 
        self.x_axis = QValueAxis()
        
#       self.x_axis.setRange( 0  , 100)
        self.x_axis.setRange(-0.3, 101)
        
        self.x_axis.setLabelFormat("%d")
        self.x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.x_axis.setTickInterval(10)
        self.chart.addAxis(self.x_axis, Qt.AlignmentFlag.AlignBottom)
        self.chart.addAxis(self.y_axis, Qt.AlignmentFlag.AlignLeft)

        self.series = QLineSeries()
        for i in range(0, 101, 1):
            self.series.append(i, 12)
        self.series.setPen(QPen(Qt.GlobalColor.green, 3))         #
        self.chart.addSeries(self.series)
        self.series.attachAxis(self.x_axis)
        self.series.attachAxis(self.y_axis)
    
        chart_view = QChartView(self.chart)     
        
        vbox = QVBoxLayout(self)
        vbox.setContentsMargins(0, 0, 0, 0)
        vbox.addWidget(chart_view)
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        list_point_y = [12, 0.3, 0.17, 3, 17]
        for point in list_point_y:
            series1 = QLineSeries()
            series1.append(-0.3, point)
            series1.append(-0.1, point)
            series1.setPen(QPen(Qt.GlobalColor.red, 4)) 
            self.chart.addSeries(series1)
            self.chart.createDefaultAxes()
            series1.hovered.connect(self.tooltip)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    def tooltip(self, point: QPointF, state: bool):
        print(f'Y: {point.y():.1f};') #
  
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    cw = ChartWindow()
    cw.show()
    sys.exit(app.exec())

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

→ Ссылка