我的第一个StackOverflow问题,对于格式不佳或者之前已经问过这个问题表示道歉(我无法在任何地方找到答案)。我正在使用Python 3和pyqtgraph。
我想在对数y刻度上绘制(价格)数据,但我想保留实际值,不是科学记数法。
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
pg.mkQApp()
pw = pg.PlotWidget()
pw.show()
myplot = pg.PlotDataItem([1,2,4,8,16,32,64,128])
p1 = pw.plotItem
p1.hideAxis('left')
p1.showAxis('right')
p1.showGrid(y = True, alpha = 1.0)
p1.addItem(myplot)
p1.setLogMode(y=True)
QtGui.QApplication.instance().exec_()
我从相关问题(PyQtgraph y axis label non scientific notation)修改了一个子类,并试图覆盖AxisItem,但它似乎没有通过myplot“激活”。 :
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
class NonScientific(pg.AxisItem):
def __init__(self, *args, **kwargs):
super(NonScientific, self).__init__(*args, **kwargs)
def tickStrings(self, values, scale, spacing):
return [int(value*1) for value in values] #This line return the NonScientific notation value
def logTickStrings(self, values, scale, spacing):
return [int(value*1) for value in values] #This line return the NonScientific notation value
pg.mkQApp()
pw = pg.PlotWidget()
pw.show()
myplot = pg.PlotDataItem([1,2,4,8,16,32,64,128], axisItems={'right': NonScientific(orientation='right')})
p1 = pw.plotItem
p1.hideAxis('left')
p1.showAxis('right')
p1.showGrid(y = True, alpha = 1.0)
p1.addItem(myplot)
p1.setLogMode(y=True)
QtGui.QApplication.instance().exec_()
我的问题是:
p1.getAxis('right')
但不知道如何以这种方式覆盖类问题2的意思是,我尝试过一种可能错误的解决方法。我在结尾前添加了这些行:
yaxticks = [[(1, '1.00'), (2, '2.00'), (4, '4.00'), (8, '8.00'), (16, '16.00'), (32, '32.00'), (64, '64.00'), (128, '128.00')]]
yax = p1.getAxis('right')
yax.setTicks(yaxticks)
还试过这个:
yaxticks = [[(0.1, '1.00'), (0.2, '2.00'), (0.4, '4.00'), (0.8, '8.00'), (1.6, '16.00'), (3.2, '32.00'), (6.4, '64.00'), (12.8, '128.00')]]
根据这些线的下降位置,我可以告诉我可以通过参考每个点的日志值来实现这一点,但这似乎是单声道的并且是一个创可贴解决方案。我的应用程序与价格数据密切配合,我担心所有参考价格数据的图形函数都需要转换为日志值。
有更好的方法吗?