Как нанести свои кастомные метки (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())