overwrite logTickValues of AaxisItem to avoid to many minor ticks; maybe closes #110
This commit is contained in:
parent
141e9f810a
commit
dde7b7006d
@ -104,6 +104,10 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
|
|||||||
self.plotItem.ctrl.logXCheck.blockSignals(True)
|
self.plotItem.ctrl.logXCheck.blockSignals(True)
|
||||||
self.plotItem.ctrl.logYCheck.blockSignals(True)
|
self.plotItem.ctrl.logYCheck.blockSignals(True)
|
||||||
|
|
||||||
|
for orient in ['top', 'bottom', 'left', 'right']:
|
||||||
|
# BAD HACK!!! but seems to work, see function for explanation
|
||||||
|
self.plotItem.getAxis(orient).logTickValues = logTickValues
|
||||||
|
|
||||||
for lineedit in [self.xmin_lineedit, self.xmax_lineedit, self.ymin_lineedit, self.ymax_lineedit]:
|
for lineedit in [self.xmin_lineedit, self.xmax_lineedit, self.ymin_lineedit, self.ymax_lineedit]:
|
||||||
lineedit.setValidator(QtGui.QDoubleValidator())
|
lineedit.setValidator(QtGui.QDoubleValidator())
|
||||||
|
|
||||||
@ -144,7 +148,7 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
|
|||||||
tmp = [np.nan, np.nan]
|
tmp = [np.nan, np.nan]
|
||||||
for j, x in enumerate(r[i]):
|
for j, x in enumerate(r[i]):
|
||||||
try:
|
try:
|
||||||
tmp[j] = 10**x
|
tmp[j] = 10**min(x, 199)
|
||||||
except OverflowError:
|
except OverflowError:
|
||||||
pass
|
pass
|
||||||
r[i] = tuple(tmp)
|
r[i] = tuple(tmp)
|
||||||
@ -423,6 +427,9 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
|
|||||||
def set_logmode(self, xmode: bool = None, ymode: bool = None):
|
def set_logmode(self, xmode: bool = None, ymode: bool = None):
|
||||||
r = self.ranges
|
r = self.ranges
|
||||||
|
|
||||||
|
self.plotItem.setXRange(*r[0])
|
||||||
|
self.plotItem.setYRange(*r[1])
|
||||||
|
|
||||||
if xmode is None:
|
if xmode is None:
|
||||||
xmode = self.plotItem.ctrl.logXCheck.isChecked()
|
xmode = self.plotItem.ctrl.logXCheck.isChecked()
|
||||||
else:
|
else:
|
||||||
@ -766,3 +773,31 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
|
|||||||
temp = self._fgcolor, self._bgcolor
|
temp = self._fgcolor, self._bgcolor
|
||||||
self.set_color(foreground=self._prev_colors[0], background=self._prev_colors[1])
|
self.set_color(foreground=self._prev_colors[0], background=self._prev_colors[1])
|
||||||
self._prev_colors = temp
|
self._prev_colors = temp
|
||||||
|
|
||||||
|
|
||||||
|
def logTickValues(minVal, maxVal, size, stdTicks):
|
||||||
|
# TODO FIND A BETTER SOLUTION!!!
|
||||||
|
# Sometimes minVal and maxVal are not log-scaled values and the loop from v1 to v2 is humongous,
|
||||||
|
# The minor list then fills the RAM completely and freezes everything
|
||||||
|
# Until there is a better solution, we overwrite this function for every AxesItem
|
||||||
|
# and do not draw minor ticks at all if there are too many
|
||||||
|
|
||||||
|
# start with the tick spacing given by tickValues().
|
||||||
|
# Any level whose spacing is < 1 needs to be converted to log scale
|
||||||
|
ticks = []
|
||||||
|
for (spacing, t) in stdTicks:
|
||||||
|
if spacing >= 1.0:
|
||||||
|
ticks.append((spacing, t))
|
||||||
|
|
||||||
|
if len(ticks) < 3:
|
||||||
|
v1 = int(np.floor(minVal))
|
||||||
|
v2 = int(np.ceil(maxVal))
|
||||||
|
# major = list(range(v1+1, v2))
|
||||||
|
minor = []
|
||||||
|
|
||||||
|
if v2 - v1 < 400:
|
||||||
|
for v in range(v1, v2):
|
||||||
|
minor.extend(v + np.log10(np.arange(1, 10)))
|
||||||
|
minor = [x for x in minor if x>minVal and x<maxVal]
|
||||||
|
ticks.append((None, minor))
|
||||||
|
return ticks
|
||||||
|
Loading…
Reference in New Issue
Block a user