1# -*- coding: utf-8 -*- 2""" 3ViewBox is the general-purpose graphical container that allows the user to 4zoom / pan to inspect any area of a 2D coordinate system. 5 6This example demonstrates many of the features ViewBox provides. 7""" 8 9import initExample ## Add path to library (just for examples; you do not need this) 10 11import pyqtgraph as pg 12from pyqtgraph.Qt import QtCore, QtGui 13import numpy as np 14 15x = np.arange(1000, dtype=float) 16y = np.random.normal(size=1000) 17y += 5 * np.sin(x/100) 18 19win = pg.GraphicsLayoutWidget(show=True) 20win.setWindowTitle('pyqtgraph example: ____') 21win.resize(1000, 800) 22win.ci.setBorder((50, 50, 100)) 23 24sub1 = win.addLayout() 25sub1.addLabel("<b>Standard mouse interaction:</b><br>left-drag to pan, right-drag to zoom.") 26sub1.nextRow() 27v1 = sub1.addViewBox() 28l1 = pg.PlotDataItem(y) 29v1.addItem(l1) 30 31 32sub2 = win.addLayout() 33sub2.addLabel("<b>One-button mouse interaction:</b><br>left-drag zoom to box, wheel to zoom out.") 34sub2.nextRow() 35v2 = sub2.addViewBox() 36v2.setMouseMode(v2.RectMode) 37l2 = pg.PlotDataItem(y) 38v2.addItem(l2) 39 40win.nextRow() 41 42sub3 = win.addLayout() 43sub3.addLabel("<b>Locked aspect ratio when zooming.</b>") 44sub3.nextRow() 45v3 = sub3.addViewBox() 46v3.setAspectLocked(1.0) 47l3 = pg.PlotDataItem(y) 48v3.addItem(l3) 49 50sub4 = win.addLayout() 51sub4.addLabel("<b>View limits:</b><br>prevent panning or zooming past limits.") 52sub4.nextRow() 53v4 = sub4.addViewBox() 54v4.setLimits(xMin=-100, xMax=1100, 55 minXRange=20, maxXRange=500, 56 yMin=-10, yMax=10, 57 minYRange=1, maxYRange=10) 58l4 = pg.PlotDataItem(y) 59v4.addItem(l4) 60 61win.nextRow() 62 63sub5 = win.addLayout() 64sub5.addLabel("<b>Linked axes:</b> Data in this plot is always X-aligned to<br>the plot above.") 65sub5.nextRow() 66v5 = sub5.addViewBox() 67v5.setXLink(v3) 68l5 = pg.PlotDataItem(y) 69v5.addItem(l5) 70 71sub6 = win.addLayout() 72sub6.addLabel("<b>Disable mouse:</b> Per-axis control over mouse input.<br>" 73 "<b>Auto-scale-visible:</b> Automatically fit *visible* data within view<br>" 74 "(try panning left-right).") 75sub6.nextRow() 76v6 = sub6.addViewBox() 77v6.setMouseEnabled(x=True, y=False) 78v6.enableAutoRange(x=False, y=True) 79v6.setXRange(300, 450) 80v6.setAutoVisible(x=False, y=True) 81l6 = pg.PlotDataItem(y) 82v6.addItem(l6) 83 84if __name__ == '__main__': 85 pg.exec() 86