Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 29 de agosto de 2012 a las 17:20 UTC
En el post anterior se trató un poco acerca de plotear funciones con Matplotlib, ahora veamos lo mismo pero usando Qwt, un widget para Qt, de los cuales disponemos sus respectivas versiones para usar con Python: PyQwt y PyQt

Dependencias:
$ sudo apt-get install python-qt4
$ sudo apt-get install python-qwt5-qt4
Desarrollo: Ya que el desarrollo con PyQt es un tema muy tratado en muchas partes no haré explicaciones detalladas (sugiero consultar éste tutorial), la idea es presentar un ejemplo sencillo el cual puedan modificar y adaptar a sus preferencias.
#! /usr/bin/python
#-*- coding: utf-8 -*-

#Yeison Cardona 

from frame_plot import *  #archivo autogenerado que contiene el plano
from numpy import arange, sin
from PyQt4.Qt import *

########################################################################
class Metodos(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ventana=Ui_MainWindow()
        self.ventana.setupUi(self)
        self.centrar()
        
        #Habilita las leyendas con el «nombre» de cada curva
        self.ventana.qwtPlot.insertLegend(Qwt.QwtLegend(), Qwt.QwtPlot.BottomLegend)        
        
        #eje horizontal
        x = arange(-6, 6, 0.01)
        
        #Primera curva
        G1=Qwt.QwtPlotCurve("sin(x)")  #se crea y se le asigna un «nombre»
        G1.setPen(QPen(Qt.green, 2))  #se le asigna un color (verde) y un grosor (2)
        G1.attach(self.ventana.qwtPlot)  #se enlaza la curva al plano
        y1 = map(sin, x)  #se crean los puntos y para cada x con respecto a una función
        G1.setData(x, y1)  #se crea la curva a partir de los valores de x y y (y1)
        
        #Segunda curva
        G2=Qwt.QwtPlotCurve("sin(x+1)*2")
        G2.setPen(QPen(Qt.blue, 2))
        G2.attach(self.ventana.qwtPlot)
        y2 = map(lambda x : sin(x+1)*2, x)
        G2.setData(x, y2)
        
        #Tercera curva
        G3=Qwt.QwtPlotCurve("sin(x)/x")
        G3.setPen(QPen(Qt.red, 2))
        G3.attach(self.ventana.qwtPlot)
        y3 = map(lambda x : sin(x)/x, x)
        G3.setData(x, y3)
        
        gr=Qwt.QwtPlotGrid()  #se crea una rejilla
        gr.setPen(QPen(Qt.gray))  #se le cambia el color por defecto (negro) por un gris
        gr.setPen(QPen(Qt.DotLine))  #se cambia la línea sólida por una línea punteada
        gr.attach(self.ventana.qwtPlot)  #se enlaca la rejilla al plano
        
        self.ventana.qwtPlot.replot()  #Dibujamos        
        
        
    #----------------------------------------------------------------------
    def centrar(self):
            screen = QtGui.QDesktopWidget().screenGeometry()
            size =  self.geometry()
            self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

Ejecutar:
Ejecutar el ejemplo es un poco diferente, ya que no es sólo un script, hay varios archivos, el anterior llamado metodos.py que contiene los comandos necesarios para plotear cualquier función, frame_plot.py el cual es un archivo auto-generado a partir del archivo frame_plot.ui el cual a su vez es un archivo creado con el Qt 4 Designer en el cual se encuentra el widget donde se harán todas las tareas de ploteado y run.py el archivo que se ejecutará (con sus respectivos permisos de ejecusión) para replicar el ejemplo.

Resultado:


Descargar

Descargar desde
Google Code

También podría interesarte:

Añadir un comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.