Python - Qwt

From Torben's Wiki

Install

Windows

In order to use the plot lib PyQwt I installed the following packages:

Unfortunately above Python installer does not add python to the windows search path, so you have to do it by hand:

  • right mouse button on
    • EN: My Computer -> Properties -> Advanced -> Environment Variables -> System Variables -> Path
    • DE: Arbeitsplatz -> Eigenschaften -> Erweitert -> Umgebungsvariablen -> Systemvariablen -> Path

add "c:\python26;" at the beginning of this line

Simple Plot Class Example

# for plotting we use Qwt5
import PyQt4.Qwt5 as Qwt
# QT stuff
from PyQt4 import Qt

class myPlot(Qwt.QwtPlot):
  def __init__(self):
    Qwt.QwtPlot.__init__(self) 
    # Initialize data
    self.x = []
    self.y = []
    self.y2 = []
 
    self.setCanvasBackground(Qt.Qt.white)
    self.plotLayout().setCanvasMargin(0)
    self.plotLayout().setAlignCanvasToScales(True)
    #self.insertLegend(Qwt.QwtLegend(), Qwt.QwtPlot.BottomLegend);
 
    # axes
    self.setAxisTitle(Qwt.QwtPlot.xBottom, "x (a.u.)")
    self.setAxisTitle(Qwt.QwtPlot.yLeft, "y (a.u.)")
    self.enableAxis(Qwt.QwtPlot.yRight)
    self.setAxisTitle(Qwt.QwtPlot.yRight, "y2 (a.u.)")

    # legend
    legend = Qwt.QwtLegend()
    #self.insertLegend(legend, Qwt.QwtPlot.RightLegend)
    self.insertLegend(legend, Qwt.QwtPlot.BottomLegend)

    # grid
    grid = Qwt.QwtPlotGrid()
    pen = Qt.QPen(Qt.Qt.DotLine)
    pen.setColor(Qt.Qt.black)
    pen.setWidth(0)
    grid.setPen(pen)
    grid.attach(self)

    # curves
    self.curve = Qwt.QwtPlotCurve("Data y")
    self.curve.setYAxis(Qwt.QwtPlot.yLeft)
    self.curve.setPen(Qt.QPen(Qt.Qt.red))
    self.curve.setSymbol(Qwt.QwtSymbol(
      Qwt.QwtSymbol.Ellipse,
      Qt.QBrush(),
      Qt.QPen(Qt.Qt.red),
      Qt.QSize(7, 7)))
    self.curve.attach(self)

    self.curve2 = Qwt.QwtPlotCurve("Data y")
    self.curve2.setYAxis(Qwt.QwtPlot.yLeft)
    self.curve2.setPen(Qt.QPen(Qt.Qt.blue))
    self.curve2.setSymbol(Qwt.QwtSymbol(Qwt.QwtSymbol.Ellipse,
      Qwt.QwtSymbol.Ellipse,
      Qt.QBrush(),
      Qt.QPen(Qt.Qt.blue),
      Qt.QSize(7, 7)))
    self.curve2.attach(self) 

  def plotValues(self, x, y,y2):
    self.x.append(x)
    self.y.append(y)
    self.y2.append(y2)
    self.curve.setData(self.x, self.y)
    self.curve2.setData(self.x, self.y2)
    self.replot()

  def clear(self):
    self.x = []
    self.y = []
    self.y2 = []
    self.curve.setData(self.x, self.y)
    self.curve2.setData(self.x, self.y2)
    self.replot()

  def setATitle(self, axis, title): # axis = x,y,y2
    title = ""+title+"" # you may want this to be a bigger value...
    if axis == "x" :
      self.setAxisTitle(Qwt.QwtPlot.xBottom, title)
    elif axis == "y" :
      self.setAxisTitle(Qwt.QwtPlot.yLeft, title)
    elif axis == "y2" :
      self.setAxisTitle(Qwt.QwtPlot.yRight, title)
    else :
      return 0