Hi,
You must be a physicist. :)
If you have a copy of the pyqtgraph module under your project source
directory (which is recommended), then easiest is to just modify the
source. In pyqtgraph/graphicsItems/AxisItem.py modify the labelString
method like:
def labelString(self):
if self.labelUnits == '':
if not self.autoSIPrefix or self.autoSIPrefixScale == 1.0:
units = ''
else:
units = asUnicode('/x%g') % (1.0/self.autoSIPrefixScale)
else:
#print repr(self.labelUnitPrefix), repr(self.labelUnits)
units = asUnicode('/%s%s') % (asUnicode(self.labelUnitPrefix),
asUnicode(self.labelUnits))
s = asUnicode('%s %s') % (asUnicode(self.labelText), asUnicode(units
))
style = ';'.join(['%s: %s' % (k, self.labelStyle[k]) for k in self.
labelStyle])
return asUnicode("<span style='%s'>%s</span>") % (style, asUnicode(s
))
Alternatively, don't use the automatic units/scaling and manually label the
axes.
A more complicated but "correct" way if you don't want to modify the
original source is to make your own class extending AxisItem and override
the labelString method as above. When creating a plotItem
<http://www.pyqtgraph.org/documentation/graphicsItems/plotitem.html#pyqtgraph.PlotItem.__init__>,
you can pass in instances of your custom AxisItem in the constructor.
Finally, a horrible and ugly way is to live-patch the method in the
existing AxisItems for your plots. For example:
#!/usr/bin/env python3
from PyQt5 import QtWidgets
import pyqtgraph as pg
class TestPlot(pg.GraphicsLayoutWidget):
def __init__(self):
super().__init__()
self.plot = self.addPlot()
self.plot.setLabels(left=("Left axis", "V"), bottom=("Bottom axis",
"s"))
self.plot.getAxis("left").enableAutoSIPrefix(True)
# Crude patch of the AxisItem label formatting method
import types
def labelSIString(self):
if self.labelUnits == '':
if not self.autoSIPrefix or self.autoSIPrefixScale == 1.0:
units = ''
else:
units = str('/x%g') % (1.0/self.autoSIPrefixScale)
else:
units = str('/%s%s') % (str(self.labelUnitPrefix), str(self.
labelUnits))
s = str('%s %s') % (str(self.labelText), str(units))
style = ';'.join(['%s: %s' % (k, self.labelStyle[k]) for k in
self.labelStyle])
return str("<span style='%s'>%s</span>") % (style, str(s))
# Once you've defined the new method, it's just one line per axis
you want to patch
self.plot.getAxis("left").labelString = types.MethodType(
labelSIString, self.plot.getAxis("left"))
self.plot.getAxis("bottom").labelString = types.MethodType(
labelSIString, self.plot.getAxis("bottom"))
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
mainwindow = TestPlot()
mainwindow.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Hopefully one of those solutions will help.
Patrick
On Wednesday, 4 March 2020 02:50:36 UTC+10:30, Wendy Benke wrote:
>
> Is there a possibility to specify units without brackets in the axis
> labeling? Currently it always looks like this: ...(V) but that's not the
> right notation. can someone please help me!
>
--
You received this message because you are subscribed to the Google Groups
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/pyqtgraph/d320af28-8d7f-4285-ac6f-dbe7e0a3e726%40googlegroups.com.