rework graph to include semester generation, fix bug where y-values were extracted wrong

This commit is contained in:
2025-06-20 09:09:28 +02:00
parent 86849b67f5
commit 3d164898bf

View File

@@ -10,6 +10,7 @@ from PySide6.QtGui import QPainter, QPen, QColor
from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis, QCategoryAxis from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis, QCategoryAxis
from src import LOG_DIR from src import LOG_DIR
from src.backend.semester import Semester
log = loguru.logger log = loguru.logger
log.remove() log.remove()
@@ -37,7 +38,7 @@ class DataQtGraph(QtWidgets.QWidget):
def __init__( def __init__(
self, self,
title: str, title: str,
data: dict, data: dict[str, Union[list[str], dict[str, list[int]]]],
generateMissing: bool, generateMissing: bool,
y_label: str, y_label: str,
x_rotation: int = 90, x_rotation: int = 90,
@@ -53,16 +54,46 @@ class DataQtGraph(QtWidgets.QWidget):
lst = [] lst = []
if generateMissing: if generateMissing:
s_start = Semester.from_string(data["x"][0])
s_end = Semester.from_string(data["x"][-1])
# generate all semesters from start to end
missing_semesters = Semester.generate_missing(s_start, s_end)
x_data = data["x"] x_data = data["x"]
y_data = data["y"] y_data = data["y"]
if not isinstance(y_data, list): if not isinstance(y_data, list):
for key in y_data: for key in y_data:
data = {"x": x_data, "y": y_data[key]} data = {"x": [], "y": []}
data = self.generateMissingSemesters(data)
data["y-label"] = key data["y-label"] = key
for semester in missing_semesters:
if semester not in x_data:
data["x"].append(semester)
data["y"].append(0)
data["x"].append(semester)
# get the index of the semester in x_data
if semester in x_data:
index = x_data.index(semester)
print("index:", index)
print(key, y_data[key])
data["y"].append(y_data[key][index])
lst.append(data) lst.append(data)
# for key in y_data:
# data = {"x": x_data, "y": y_data[key]}
# data = self.generateMissingSemesters(data)
# data["y-label"] = key
else: else:
data = self.generateMissingSemesters(data) # data = self.generateMissingSemesters(data)
data = {"x": [], "y": []}
for semester in missing_semesters:
# if semester not in x_data, set y to 0
if semester not in x_data:
data["x"].append(semester)
data["y"].append(0)
data["x"].append(semester)
# get the index of the semester in x_data
if semester in x_data:
index = x_data.index(semester)
data["y"].append(y_data[index])
data["y-label"] = y_label
lst.append(data) lst.append(data)
else: else:
@@ -76,9 +107,6 @@ class DataQtGraph(QtWidgets.QWidget):
else: else:
lst.append(data) lst.append(data)
x_data = lst[0]["x"] # x_data = lst[0]["x"] #
xdict = dict(enumerate(x_data))
print("xdict:", xdict)
self.chart.createDefaultAxes() self.chart.createDefaultAxes()
for entry in lst: for entry in lst:
@@ -88,6 +116,16 @@ class DataQtGraph(QtWidgets.QWidget):
# #
entryseries.append(entry["x"].index(x_val), y_val) entryseries.append(entry["x"].index(x_val), y_val)
entryseries.setName(entry["y-label"] if "y-label" in entry else y_label) entryseries.setName(entry["y-label"] if "y-label" in entry else y_label)
entryseries.setPen(
QPen(
QColor(
random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255),
),
2,
)
)
self.chart.addSeries(entryseries) self.chart.addSeries(entryseries)
@@ -106,7 +144,7 @@ class DataQtGraph(QtWidgets.QWidget):
# str() # str()
# ) # )
self.chart.legend().setVisible(True) self.chart.legend().setVisible(True)
self.chart.legend().setAlignment(QtCore.Qt.AlignmentFlag.AlignBottom) self.chart.legend().setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
# set legend labels # set legend labels
self.chart.setAxisY(QValueAxis(self.chart), entryseries) self.chart.setAxisY(QValueAxis(self.chart), entryseries)