I found a working example in metalshreds last comment in this thread:
forum.qt.io/topic/105570/qgraphicstextitem-over-qchartview/4
Updated for pyside6
import sys
from PySide6.QtCharts import *
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
import numpy as np
class Chart(QMainWindow):
def __init__(self):
super().__init__()
# chart creation hierarchy:
# chartview-->charts-->series-->set(or points)
# create chart widget
self.chart = QChart()
self.chart.legend().setVisible(False)
self.chart.setTitle("Phasor Plot")
self.setGeometry(0, 0, 800, 500)
self.list_label_graphics_text_item = []
# create chartview
self.chartView = QChartView(self.chart)
self.chartView.setRenderHint(QPainter.Antialiasing)
self.chart.scene().changed.connect(self.update_label_position)
self.g = [0.94058736, 0.79830002, 0.49735222, 0.3054408, 0.19831079, 0.1366765,
0.09905082, 0.074736, 0.0582399, 0.04658614, 0.03807176]
self.s = [0.23639539, 0.40126936, 0.49999299, 0.46059387, 0.3987275, 0.34350551,
0.29873024, 0.26296489, 0.23419652, 0.21075073, 0.19136954]
self.lifetime_labels = ['0.5ns', '1ns', '2ns', '3ns', '4ns', '5ns', '6ns', '7ns', '8ns', '9ns', '10ns']
# series - lifetime labels
series_lifetime_markers = QScatterSeries()
for pos in np.arange(len(self.lifetime_labels)):
series_lifetime_markers.append(self.g[pos], self.s[pos])
''' chart - add series'''
self.chart.addSeries(series_lifetime_markers)
# x_axis
self.axis_x = QValueAxis()
self.axis_x.setRange(0, 1)
self.axis_x.setTickCount(15)
self.axis_x.setLabelFormat("%.2f")
self.axis_x.setTitleText("g")
self.chart.setAxisX(self.axis_x, series_lifetime_markers)
# y_axis
self.axis_y = QValueAxis()
self.axis_y.setRange(0, 0.7)
self.axis_y.setTickCount(15)
self.axis_y.setLabelFormat("%.2f")
self.axis_y.setTitleText("s")
self.chart.setAxisY(self.axis_y, series_lifetime_markers)
''' LAYOUTS '''
layout = QVBoxLayout()
layout.addWidget(self.chartView)
self.setCentralWidget(QWidget(self))
self.centralWidget().setLayout(layout)
def update_label_position(self):
''' position labels over chart '''
# https://www.qtcentre.org/threads/68981-QChart-QDateTiemAxis-mapTo-and-mapFrom
# https://stackoverflow.com/questions/44067831/get-mouse-coordinates-in-qchartviews-axis-system
# populate list of labels graphicsTextItems
if len(self.list_label_graphics_text_item) == 0:
for pos in np.arange(len(self.g)): # iterate through g coordinates
label = QGraphicsTextItem(self.lifetime_labels[pos])
self.list_label_graphics_text_item.append(label)
self.chart.scene().addItem(label)
# position the labels
for pos, label in enumerate(self.list_label_graphics_text_item):
point_in_series = QPointF(self.g[pos], self.s[pos]) # position in series
point_series_to_chart = self.chart.mapToPosition(point_in_series, self.chart.series()[0])
point_chart_to_scene = self.chart.mapToScene(point_series_to_chart)
label.setPos(point_chart_to_scene)
print(f'{self.lifetime_labels[pos]}: pos in series {point_in_series}\n'
f'pos in chart: {point_series_to_chart}\n'
f'pos in scene: {point_chart_to_scene}\n')
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Chart()
window.show()
sys.exit(app.exec_())