SourceForge logo
SourceForge logo
Menu

matplotlib-users

From: Till S. <mai...@gm...> - 2009年12月26日 17:52:47
If you want to use it in the example section or anything else, you are 
welcome.
greetings
Till
#!/usr/bin/env python
# embedding_in_qt4.py --- Simple Qt4 application embedding matplotlib 
canvases
# It also shows, that normal plotting is quite slow.
#
# Copyright (C) 2005 Florent Rougon
# 2006 Darren Dale
#
# This file is an example program for matplotlib. It may be used and
# modified with no restriction; raw copies as well as modified versions
# may be distributed without limitation.
import sys, os, random
from PyQt4 import QtGui, QtCore
from numpy import arange, sin, pi
from numpy.random import randn, randint
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as 
FigureCanvas
from matplotlib.figure import Figure
progname = os.path.basename(sys.argv[0])
progversion = "0.1"
class MyMplCanvas(FigureCanvas):
 """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, 
etc.)."""
 def __init__(self, parent=None, width=5, height=4, dpi=100):
 fig = Figure(figsize=(width, height), dpi=dpi)
 self.axes = fig.add_subplot(111)
 # We want the axes cleared every time plot() is called
 self.axes.hold(False)
 self.compute_initial_figure()
 #
 FigureCanvas.__init__(self, fig)
 self.setParent(parent)
 FigureCanvas.setSizePolicy(self,
 QtGui.QSizePolicy.Expanding,
 QtGui.QSizePolicy.Expanding)
 FigureCanvas.updateGeometry(self)
 def compute_initial_figure(self):
 pass
class MyStaticMplCanvas(MyMplCanvas):
 """Simple canvas with a sine plot."""
 def compute_initial_figure(self):
 t = arange(0.0, 3.0, 0.01)
 s = sin(2*pi*t)
 self.axes.plot(t, s)
class MyDynamicMplCanvas(MyMplCanvas):
 """A canvas that updates itself every second with a new plot."""
 def __init__(self, *args, **kwargs):
 MyMplCanvas.__init__(self, *args, **kwargs)
 self.timer = QtCore.QTimer(self)
 QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), 
self.update_figure)
 self.timer.start(1000)
 def compute_initial_figure(self):
 self.axes.plot(arange(4), randint(0, 10, 4), 'r')
 def update_figure(self):
 # Build a list of 4 random integers between 0 and 10 (both 
inclusive)
 l = randint(0, 10, 4)
 self.axes.plot(arange(1, 5), l, 'r')
 self.draw()
 
 def stop_timer(self):
 self.timer.stop()
 
 
 
class MyBlittMplCanvas(MyMplCanvas):
 """"A canvas thats updates itself as fast a possible, using blitting."""
 def __init__(self, *args, **kwargs):
 MyMplCanvas.__init__(self, *args, **kwargs)
 
 #self.draw()
 self.old_size = self.axes.bbox.width, self.axes.bbox.height
 self.ax_background = self.copy_from_bbox(self.axes.bbox)
 self.cnt = 0
 self.axes.set_autoscale_on(False)
 #self.draw() 
 self.timer=QtCore.QTimer()
 self.connect(self.timer, QtCore.SIGNAL("timeout()"), 
self.update_figure)
 self.timer.start(0)
 
 def blit(self, bbox=None):
 self.replot = bbox
 l, b, w, h = bbox.bounds
 t = b + h
 self.repaint(l, self.renderer.height-t, w, h)
 
 def compute_initial_figure(self): 
 self.t = arange(0.0, 3.0, 0.01)
 s = sin(2*pi*self.t)+randn(len(self.t))
 self.line=self.axes.plot(self.t, s)[0]
 
 def update_figure(self): 
 current_size = self.axes.bbox.width, self.axes.bbox.height
 if self.old_size != current_size:
 self.old_size = current_size
 self.axes.clear()
 self.axes.grid()
 self.draw()
 self.ax_background = self.copy_from_bbox(self.axes.bbox)
 self.restore_region(self.ax_background, bbox=self.axes.bbox)
 # update the data
 self.line.set_ydata(sin(2*pi*self.t)+randn(len(self.t)))
 
 # just draw the animated artist
 self.axes.draw_artist(self.line)
 # just redraw the axes rectangle
 self.blit(self.axes.bbox)
 
class ApplicationWindow(QtGui.QMainWindow):
 def __init__(self):
 QtGui.QMainWindow.__init__(self)
 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
 self.setWindowTitle("application main window")
 self.file_menu = QtGui.QMenu('&File', self)
 self.file_menu.addAction('&Quit', self.fileQuit,
 QtCore.Qt.CTRL + QtCore.Qt.Key_Q)
 self.menuBar().addMenu(self.file_menu)
 self.help_menu = QtGui.QMenu('&Help', self)
 self.menuBar().addSeparator()
 self.menuBar().addMenu(self.help_menu)
 self.help_menu.addAction('&About', self.about)
 self.main_widget = QtGui.QWidget(self)
 l = QtGui.QVBoxLayout(self.main_widget)
 sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
 dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, 
dpi=100)
 bc = MyBlittMplCanvas(self.main_widget, width=5, height=4, dpi=100)
 stopdc=QtGui.QPushButton("Stop dynamic Timer")
 self.connect(stopdc, QtCore.SIGNAL("clicked()"), dc.stop_timer)
 l.addWidget(sc)
 l.addWidget(dc)
 l.addWidget(stopdc)
 l.addWidget(bc)
 self.main_widget.setFocus()
 self.setCentralWidget(self.main_widget)
 self.statusBar().showMessage("All hail matplotlib!", 2000)
 def fileQuit(self):
 self.close()
 def closeEvent(self, ce):
 self.fileQuit()
 def about(self):
 QtGui.QMessageBox.about(self, "About %s" % progname,
u"""%(prog)s version %(version)s
Copyright \N{COPYRIGHT SIGN} 2005 Florent Rougon, 2006 Darren Dale
This program is a simple example of a Qt4 application embedding matplotlib
canvases.
It may be used and modified with no restriction; raw copies as well as
modified versions may be distributed without limitation."""
% {"prog": progname, "version": progversion})
qApp = QtGui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.setWindowTitle("%s" % progname)
aw.show()
sys.exit(qApp.exec_())
#qApp.exec_()
From: Darren D. <dsd...@gm...> - 2009年12月29日 21:37:00
On Sat, Dec 26, 2009 at 12:52 PM, Till Stensitzki <mai...@gm...> wrote:
> If you want to use it in the example section or anything else, you are
> welcome.
We also have an existing blitting example at
http://matplotlib.sourceforge.net/examples/animation/animation_blit_qt4.html
. I would prefer not to add blitting to the emedding_in_qt4 example,
so we can keep it as short and simple as possible.
Darren
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /