2015-04-03 68 views
0

我有一个看起来像这样的函数。我将像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的双精度值似乎有奇怪的行为。

+0

你能更清楚什么是“图形似乎迫使两位小数点图”的意思?点出现在错误的地方?轴标签是否错误?这将有助于发布一个例子,1)立即显示不正确的行为,2)执行(不要让我们调试你的例子)。 – Luke 2015-04-04 15:04:47

+0

有没有办法在这里发布图片? – Ivan 2015-04-05 00:50:27

+0

如果我添加9.43456,它会正确显示在图形中,并且轴对于正在进入的数字有意义。如果我输入0.94356,它会强制图中的数字为943.56,并且该轴对于该数字有意义。奇怪的是,在我添加数字之前,我在控制台上输入了我添加的数字,这是正确的。这是这样做的图形本身有点奇怪。如果我添加943560,它也会强制943.56。如果我添加ints,图表显示(ks)。如果添加像0.9这样的数字,它会显示(ms)。只有当我添加双打> = 1时,该图显示了我所要求的,(s) – Ivan 2015-04-05 01:13:06

回答

1

AxisItem自动缩放的单位。当你写

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

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

如果不希望这种行为,那么就省略单位参数:

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

+0

tada!谢谢。顺便说一句,为什么在Symbol3之后的额外(s)?我刚写了Symbol,它似乎工作。 – Ivan 2015-04-06 19:17:34

+0

还有一个问题,如果我不想为轴显示1.2445,我实际上希望它向我显示零,1.24450如何告诉它显示多少个精度符号?换句话说,如果数字太小,我希望轴始终保持一定的精度并填充零。这样,我不会得到一些数字为两个数字,其余3个,等等。 – Ivan 2015-04-06 19:19:06

+0

这只是一个字符串显示在轴标签;我以为你想要那里的(s)。任何字符串都被允许。要更改刻度字符串,您需要创建一个'AxisItem'子类并覆盖''tickStrings()'。默认实现非常简单:https://github.com/pyqtgraph/pyqtgraph/blob/develop/pyqtgraph/graphicsItems/AxisItem.py#L736 – Luke 2015-04-07 21:31:29

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_() 
+0

谢谢。然而,这些事情都没有影响。 – Ivan 2015-04-03 23:49:30

+0

我很快就会找到答案。 – alexisdevarennes 2015-04-03 23:52:04

+0

我在帖子中增加了一些代码...不应该有所作为 – Ivan 2015-04-03 23:52:55