向数据中添加一个整数,但绘制一个实数
Adding an integer to data, but plots a real
我有一个看起来像这样的函数。我正在向数据中添加像 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 之类的数据会将图形移动到(毫秒),并强制将数据显示为 923.45
所以尝试绘制整数图形,并尝试绘制小于 1 的双精度图形似乎有奇怪的行为。
我正在查看它,但是我已经更正了一些错误,例如忘记用 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_()
如果您提供单位字符串,AxisItem
会自动缩放其单位。当你写
p3.setLabel('left', 'Symbol3', 's')
,
您告诉 AxisItem
该轴的数据单位为 's',它会自动应用 SI 前缀以保持刻度标签较小。因此,如果您的值从 0 变为 0.0001,则轴值将显示为 0 到 100,单位将为“µs”(因为 0.0001 s 与 100 µs 相同)。
如果您不希望出现这种情况,则只需省略单位参数即可:
p3.setLabel('left', 'Symbol3 (s)')
我有一个看起来像这样的函数。我正在向数据中添加像 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 之类的数据会将图形移动到(毫秒),并强制将数据显示为 923.45
所以尝试绘制整数图形,并尝试绘制小于 1 的双精度图形似乎有奇怪的行为。
我正在查看它,但是我已经更正了一些错误,例如忘记用 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_()
AxisItem
会自动缩放其单位。当你写
p3.setLabel('left', 'Symbol3', 's')
,
您告诉 AxisItem
该轴的数据单位为 's',它会自动应用 SI 前缀以保持刻度标签较小。因此,如果您的值从 0 变为 0.0001,则轴值将显示为 0 到 100,单位将为“µs”(因为 0.0001 s 与 100 µs 相同)。
如果您不希望出现这种情况,则只需省略单位参数即可:
p3.setLabel('left', 'Symbol3 (s)')