SourceForge logo
SourceForge logo
Menu

matplotlib-users

From: Eric F. <eri...@gm...> - 2013年08月29日 17:52:03
I took the example that ships with 1.3.0 and have modified it to use a grid
layout and show 9 graphs in a 3x3 grid.
When I do this it, other widgets become rather unresponsive.
Is there a way to fix this?
Somehow offload whatever is hogging CPU onto another thread or something?
Below is the code....
Thanks,
~Eric
#!/usr/bin/env python
# embedding_in_qt4.py --- Simple Qt4 application embedding matplotlib
canvases
#
# 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.
from __future__ import unicode_literals
import sys, os, random
from PyQt4 import QtGui, QtCore
from numpy import arange, sin, pi
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 MyDynamicMplCanvas(MyMplCanvas):
 """A canvas that updates itself every second with a new plot."""
 def __init__(self, *args, **kwargs):
 MyMplCanvas.__init__(self, *args, **kwargs)
 timer = QtCore.QTimer(self)
 QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"),
self.update_figure)
 timer.start(750)
 def compute_initial_figure(self):
 self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
 def update_figure(self):
 # Build a list of 4 random integers between 0 and 10 (both
inclusive)
 l = [ random.randint(0, 10) for i in range(4) ]
 self.axes.plot([0, 1, 2, 3], l, 'r')
 self.draw()
class ApplicationWindow(QtGui.QMainWindow):
 def __init__(self):
 QtGui.QMainWindow.__init__(self)
 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
 self.setWindowTitle("Unresponsive Application")
 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)
 main_layout = QtGui.QVBoxLayout()
 chart_layout = QtGui.QGridLayout()
 for row in range(3):
 for col in range(3):
 dc = MyDynamicMplCanvas(self.main_widget, width=5,
height=4, dpi=100)
 chart_layout.addWidget(dc, row, col)
 main_layout.addWidget(QtGui.QPushButton("Unresponsive"))
 main_layout.addWidget(QtGui.QPushButton("Widgets"))
 horizontalSlider = QtGui.QSlider()
 horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
 main_layout.addWidget(horizontalSlider)
 main_layout.addLayout(chart_layout)
 self.main_widget.setLayout(main_layout)
 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",
"""embedding_in_qt4.py example
Copyright 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."""
)
if __name__ == '__main__':
 app = QtGui.QApplication(sys.argv)
 aw = ApplicationWindow()
 aw.show()
 sys.exit(app.exec_())
From: Pierre H. <pie...@cr...> - 2013年08月30日 08:25:52
Attachments: signature.asc
Hi Eric,
Le 29/08/2013 19:51, Eric Frederich a écrit :
> I took the example that ships with 1.3.0 and have modified it to use a
> grid layout and show 9 graphs in a 3x3 grid.
> When I do this it, other widgets become rather unresponsive.
> Is there a way to fix this?
> Somehow offload whatever is hogging CPU onto another thread or something?
I just ran your code on my computer and I don't get the unresponsive
widgets problem. The program takes 6% of one CPU.
Yet the slider is not totally fluid. It gets better if I slowdown the
plot update timer.
Do you run your code on a powerful computer ?
best,
Pierre
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 によって変換されたページ (->オリジナル) /