diff --git a/Orange/widgets/visualize/utils/plotutils.py b/Orange/widgets/visualize/utils/plotutils.py index 076ae93282c..3dab7cdf98a 100644 --- a/Orange/widgets/visualize/utils/plotutils.py +++ b/Orange/widgets/visualize/utils/plotutils.py @@ -614,6 +614,14 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.label.setDefaultTextColor(self.palette().color(QPalette.Text)) + def getSIPrefixEnableRanges(self): + # Since pyqtgraph 0.14, axes without units also get an SI prefix for + # values below 1 (e.g. "(x0.001)"). Keep the behaviour of pyqtgraph + # 0.13 (which does not call this method): no prefix from 1e-3 to 1e6. + if self.labelUnits == "": + return (0, 1e-3), (1e6, np.inf) + return super().getSIPrefixEnableRanges() + def changeEvent(self, event: QEvent) -> None: if event.type() == QEvent.FontChange: self.picture = None diff --git a/Orange/widgets/visualize/utils/tests/test_plotutils.py b/Orange/widgets/visualize/utils/tests/test_plotutils.py index 51cb8786b24..201299e707e 100644 --- a/Orange/widgets/visualize/utils/tests/test_plotutils.py +++ b/Orange/widgets/visualize/utils/tests/test_plotutils.py @@ -4,7 +4,11 @@ import numpy as np from AnyQt.QtCore import QPointF -from Orange.widgets.visualize.utils.plotutils import InteractiveViewBox +from orangewidget.tests.base import GuiTest + +from Orange.widgets.visualize.utils.plotutils import ( + AxisItem, InteractiveViewBox +) class TestInteractiveViewBox(unittest.TestCase): @@ -21,5 +25,27 @@ def test_update_scale_box(self): np.testing.assert_equal(trm, [[2, 0, 0], [0, 2, 0], [0, 0, 1]]) +class TestAxisItem(GuiTest): + def test_si_prefix_without_units(self): + axis = AxisItem("bottom") + axis.setLabel("a") + + axis.setRange(0, 0.5) + self.assertEqual(axis.autoSIPrefixScale, 1) + axis.setRange(0, 5e5) + self.assertEqual(axis.autoSIPrefixScale, 1) + + axis.setRange(0, 5e-4) + self.assertEqual(axis.autoSIPrefixScale, 1e6) + axis.setRange(0, 5e6) + self.assertEqual(axis.autoSIPrefixScale, 1e-6) + + def test_si_prefix_with_units(self): + axis = AxisItem("bottom") + axis.setLabel("a", units="s") + axis.setRange(0, 0.5) + self.assertEqual(axis.autoSIPrefixScale, 1000) + + if __name__ == '__main__': unittest.main()