def draw(self, painter, dummy): # for some reason, in qwt 5 an extra parameter is needed # in the above function definition. The corresponding # C++ code offers several possibilities, but just a 'dummy' # seems adequate .... # 1. paint real value ticks as done in C++ code # 2. paint imag value ticks with the shift depending on # the dimension and tick spacing # 3. draw backbone, if needed step_eps = 1.0e-6 # constant value in the c++ equivalent majLen = QwtScaleDraw.tickLength(self, QwtScaleDiv.MajorTick) medLen = QwtScaleDraw.tickLength(self, QwtScaleDiv.MediumTick) minLen = QwtScaleDraw.tickLength(self, QwtScaleDiv.MinorTick) #print('majLen medLen ', majLen, ' ', medLen, ' ', minLen) #print('lengths ', majLen,' ', medLen,' ', minLen) self.offset = 0 scldiv = QwtScaleDraw.scaleDiv(self) # plot major ticks # Sometimes, for reasons deep inside Qwt, major_ticks seems to be # returned as a null list for reasons I don't understand major_ticks = scldiv.ticks(QwtScaleDiv.MajorTick) #print('major ticks ', major_ticks) major_step = 0.0 try: major_step = major_ticks[1] - major_ticks[0] except: pass major_count = len(major_ticks) for i in range(major_count): val = major_ticks[i] #print('initial major val = ', val) if not self.end_value is None: v = val if val >= self.end_value: v = val - self.delta else: if not self.divisor is None: v = val % self.divisor if self.offset == 0 and v != val: self.offset = major_step - v % major_step val = val + self.offset #print('final major val = ', val) QwtScaleDraw.drawTick(self, painter, val, minLen) QwtScaleDraw.drawLabel(self, painter, val) # also, optionally plot a major tick at the dividing point if self.do_separator: QwtScaleDraw.drawTick(self, painter, self.separator, majLen) QwtScaleDraw.drawLabel(self, painter, self.separator) # Sometimes, for reasons deep inside Qwt, minor_ticks seems to be # returned as a null list for reasons I don't understand minor_ticks = scldiv.ticks(QwtScaleDiv.MinorTick) minor_step = 0.0 try: minor_step = minor_ticks[1] - minor_ticks[0] except: pass minor_count = len(minor_ticks) # can't handle logs properly, but so what? # if scldiv.logScale(): # pass # for i in range(scldiv.minCnt()): # QwtScaleDraw.drawTick( # self, painter, scldiv.minMark(i), minLen) # else: if True: minor_ticks = scldiv.ticks(QwtScaleDiv.MinorTick) #print('minor ticks ', minor_ticks) medium_ticks = scldiv.ticks(QwtScaleDiv.MediumTick) #print('medium ticks ', medium_ticks) kmax = major_count - 1 if kmax > 0: majTick = major_ticks[0] hval = majTick - 0.5 * major_step k = 0 for i in range(minor_count): val = minor_ticks[i] if val > majTick: if k < kmax: k = k + 1 majTick = major_ticks[k] else: majTick += (major_ticks[kmax] + major_step) hval = majTick - 0.5 * major_step if abs(val - hval) < step_eps * major_step: QwtScaleDraw.drawTick(self, painter, val, medLen) else: QwtScaleDraw.drawTick(self, painter, val, minLen) if QwtScaleDraw.Backbone: QwtScaleDraw.drawBackbone(self, painter)