pyqtgraph/examples/PlotWidget.py

95 lines
2.5 KiB
Python
Raw Normal View History

2010-03-22 05:48:52 +00:00
# -*- coding: utf-8 -*-
2013-02-25 04:09:03 +00:00
"""
Demonstrates use of PlotWidget class. This is little more than a
GraphicsView with a PlotItem placed in its center.
"""
2012-03-17 15:47:20 +00:00
import initExample ## Add path to library (just for examples; you do not need this)
2010-03-22 05:48:52 +00:00
2012-03-02 03:53:52 +00:00
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
2010-03-22 05:48:52 +00:00
#QtGui.QApplication.setGraphicsSystem('raster')
2010-03-22 05:48:52 +00:00
app = QtGui.QApplication([])
mw = QtGui.QMainWindow()
2013-02-25 04:09:03 +00:00
mw.setWindowTitle('pyqtgraph example: PlotWidget')
mw.resize(800,800)
2010-03-22 05:48:52 +00:00
cw = QtGui.QWidget()
mw.setCentralWidget(cw)
l = QtGui.QVBoxLayout()
cw.setLayout(l)
pw = pg.PlotWidget(name='Plot1') ## giving the plots names allows us to link their axes together
2010-03-22 05:48:52 +00:00
l.addWidget(pw)
pw2 = pg.PlotWidget(name='Plot2')
2010-03-22 05:48:52 +00:00
l.addWidget(pw2)
pw3 = pg.PlotWidget()
2010-03-22 05:48:52 +00:00
l.addWidget(pw3)
mw.show()
2010-03-22 05:48:52 +00:00
## Create an empty plot curve to be filled later, set its pen
2010-03-22 05:48:52 +00:00
p1 = pw.plot()
p1.setPen((200,200,100))
## Add in some extra graphics
rect = QtGui.QGraphicsRectItem(QtCore.QRectF(0, 0, 1, 5e-11))
rect.setPen(pg.mkPen(100, 200, 100))
2010-03-22 05:48:52 +00:00
pw.addItem(rect)
pw.setLabel('left', 'Value', units='V')
pw.setLabel('bottom', 'Time', units='s')
pw.setXRange(0, 2)
pw.setYRange(0, 1e-10)
2010-03-22 05:48:52 +00:00
def rand(n):
data = np.random.random(n)
2010-03-22 05:48:52 +00:00
data[int(n*0.1):int(n*0.13)] += .5
data[int(n*0.18)] += 2
data[int(n*0.1):int(n*0.13)] *= 5
data[int(n*0.18)] *= 20
data *= 1e-12
return data, np.arange(n, n+len(data)) / float(n)
2010-03-22 05:48:52 +00:00
def updateData():
yd, xd = rand(10000)
p1.setData(y=yd, x=xd)
2010-03-22 05:48:52 +00:00
## Start a timer to rapidly update the plot in pw
2010-03-22 05:48:52 +00:00
t = QtCore.QTimer()
t.timeout.connect(updateData)
2010-03-22 05:48:52 +00:00
t.start(50)
#updateData()
2010-03-22 05:48:52 +00:00
## Multiple parameterized plots--we can autogenerate averages for these.
2010-03-22 05:48:52 +00:00
for i in range(0, 5):
for j in range(0, 3):
yd, xd = rand(10000)
pw2.plot(y=yd*(j+1), x=xd, params={'iter': i, 'val': j})
## Test large numbers
curve = pw3.plot(np.random.normal(size=100)*1e0, clickable=True)
curve.curve.setClickable(True)
curve.setPen('w') ## white pen
curve.setShadowPen(pg.mkPen((70,70,30), width=6, cosmetic=True))
def clicked():
2012-05-11 22:05:41 +00:00
print("curve clicked")
curve.sigClicked.connect(clicked)
lr = pg.LinearRegionItem([1, 30], bounds=[0,100], movable=True)
pw3.addItem(lr)
line = pg.InfiniteLine(angle=90, movable=True)
pw3.addItem(line)
line.setBounds([0,200])
2012-03-17 15:47:20 +00:00
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()