向数据添加整数,但绘制实数

时间:2015-04-03 23:18:27

标签: python pyqt4 pyqtgraph

我有一个看起来像这样的功能。我正在向数据添加像940320这样的整数。有趣的是print语句正确地表明它是一个int。但那么图表似乎强制图形的两个小数点?!令人抓狂的是它使用将数据显示为整数,但它已经停止工作,即使我不认为我做了任何可能导致这种情况的改变!

我注意到的一个线索是,标题标签曾经在名称的末尾有(s),例如,Symbol1(s)。但现在由于某种原因,他们最后说(ks)。我不知道这是做什么的。

无论如何,有没有办法强制pyqtgraph绘制一个int,而不是它认为数字的精度是什么?

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui

import numpy as np

win = pg.GraphicsWindow()
win.setWindowTitle('Scrolling Plots')
win.showMaximized()

# 1) Simplest approach -- update data in the array such that plot appears to scroll
#    In these examples, the array size is fixed.
p1 = win.addPlot()
p2 = win.addPlot()

p1.setLabel('left', 'Symbol1', 's')
p2.setLabel('left', 'Symbol2', 's')

data1 = []
data2 = []
data3 = []
data4 = []

curve1 = p1.plot(data1)
curve2 = p2.plot(data2)

win.nextRow()

p3 = win.addPlot()
p4 = win.addPlot()

p3.setLabel('left', 'Symbol3', 's')
p4.setLabel('left', 'Symbol4', 's')

curve3 = p3.plot(data3)
curve4 = p4.plot(data4)

def update1(data):
    global data1, curve1, ptr1
    print "Got symbol 1 ", data

    if data1:
       data1[:-1] = data1[1:]  # shift data in the array one sample left
                                # (see also: np.roll)
    data1.append(data)
    curve1.setData(data1)

    ptr1 += 1
    QtGui.QApplication.instance().processEvents()

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

修改

即使我说data1.append(int(data))同样的行为

编辑1:

添加0.92345之类的数据会将图形移动到(ms)并强制数据显示为923.45

因此,尝试绘制整数图形,并尝试绘制小于1的双精度图像似乎有奇怪的行为。

2 个答案:

答案 0 :(得分:1)

如果您提供单位字符串,

AxisItem会自动缩放其单位。当你写

p3.setLabel('left', 'Symbol3', 's')

您告诉AxisItem该轴的数据具有's'单位,并且它将自动应用SI前缀以使刻度标签保持较小。因此,如果您的值从0变为0.0001,则轴值将显示为0到100,单位将为“μs”(因为0.0001 s与100μs相同)。

如果您不想要这种行为,那么只需省略units参数:

p3.setLabel('left', 'Symbol3 (s)')

答案 1 :(得分:0)

我正在看一下,但我已经纠正了一些错误,例如忘记用sys.argv实例化QtGui.QApplication。

import sys
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
QtApp = QtGui.QApplication(sys.argv)


win = pg.GraphicsWindow()
win.setWindowTitle('Scrolling Plots')
win.showMaximized()

# 1) Simplest approach -- update data in the array such that plot appears to scroll
#    In these examples, the array size is fixed.
p1 = win.addPlot()
p2 = win.addPlot()

p1.setLabel('left', 'Symbol1', 's')
p2.setLabel('left', 'Symbol2', 's')

data1 = []
data2 = []
data3 = []
data4 = []

curve1 = p1.plot(data1)

def update1(data):
    global data1, curve1, ptr1
    print "Got symbol 1 ", data

    if data1:
        data1[:-1] = data1[1:]  # shift data in the array one sample left
        # (see also: np.roll)
    data1.append(data)
    curve1.setData(data1)

    ptr1 += 1
    QtApp.instance().processEvents()

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtApp.instance().exec_()