The problem relates to the way of calculating y-axis range. The calculation in many cases would use a yStep causing the final yTop smaller than the actual yMaxValue.
I added the following as a quick work-around so that max value is always shown on the chart. The drawback is sometimes there would be 7 steps (not a big deal compared to be cutting off the top).
< if self.yLabelValues[-1] < yMaxValue:
< self.yLabelValues.append(self.yLabelValues[-1] + self.yStep)