Hi guys,
I have a problem with the "set_array" function. In a example from the
matplotlib homepage this works fine, but when I tries to adaot to my needs,
the image just stays the same. No Update, but also no error messages:
see On Timer function --> the plot is just created during the start but
never updated again. If I use imshow all the time, it works, but my
intention was not to use imshow allover, just update the image data.
Any ideas?
Cheers,
Sebi
Here is the code:
#!/usr/bin/env python
"""
"""
import sys, time, os, gc
import matplotlib
matplotlib.use('WXAgg')
from matplotlib import rcParams
import matplotlib.cm as cm
import numpy as np
import optparse
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.figure import Figure
from wx import *
TIMER_ID = NewId()
class PlotFigure(Frame):
def __init__(self):
Frame.__init__(self, None, -1, "Test embedded wxFigure")
self.fig = Figure((8,6), 100)
self.canvas = FigureCanvasWxAgg(self, -1, self.fig)
self.toolbar = NavigationToolbar2Wx(self.canvas)
self.toolbar.Realize()
# On Windows, default frame size behaviour is incorrect
# you don't need this under Linux
tw, th = self.toolbar.GetSizeTuple()
fw, fh = self.canvas.GetSizeTuple()
self.toolbar.SetSize(Size(fw, th))
# Create a figure manager to manage things
# Now put all into a sizer
sizer = BoxSizer(VERTICAL)
# This way of adding to sizer allows resizing
sizer.Add(self.canvas, 1, LEFT|TOP|GROW)
# Best to allow the toolbar to resize!
sizer.Add(self.toolbar, 0, GROW)
self.SetSizer(sizer)
self.Fit()
EVT_TIMER(self, TIMER_ID, self.onTimer)
def init_plot_data(self):
# initialize data array and plot for the 1st time
self.data = np.zeros([96])
# create matrix which will contain the number of counted cells
well96 = np.zeros([8,12])
# read in cell numbers
#Nr = 8 # number of rows
#Nc = 12 # number of columns
#labelx = ['1','2','3','4','5','6','7','8','9','10','11','12']
#labely = ['A','B','C','D','E','F','G','H']
ax1 = self.fig.add_axes([0.075,0.1,0.75,0.85])
self.cax = self.fig.add_axes([0.85,0.1,0.075,0.85])
self.im = ax1.imshow(well96, cmap=cm.jet, interpolation='nearest')
self.fig.colorbar(self.im, cax=self.cax, orientation='vertical')
#self.ax1.set_xticks(np.arange(0,12,1))
#self.ax1.set_xticklabels(labelx)
#self.ax1.set_yticks(np.arange(0,8,1))
#self.ax1.set_yticklabels(labely)
#self.ax1.set_title('Cell Count per Well')
def GetToolBar(self):
# You will need to override GetToolBar if you are using an
# unmanaged toolbar in your frame
return self.toolbar
def onTimer(self, evt):
datain = np.loadtxt(options.filename, delimiter=';')
self.data[0:len(datain[:,1])] = datain[:,1]
welldata = self.data.reshape(8,12)
print welldata
self.im.set_array(welldata)
#self.im = self.ax1.imshow(welldata, cmap=cm.jet, interpolation='nearest')
self.fig.colorbar(self.im, cax=self.cax,orientation='vertical')
self.canvas.draw()
def onEraseBackground(self, evt):
# this is supposed to prevent redraw flicker on some X servers...
pass
if __name__ == '__main__':
# configure parsing option for command line usage
parser = optparse.OptionParser()
parser.add_option('-f', '--file',
action="store", dest="filename",
help="query string", default="spam")
# read command line arguments
options, args = parser.parse_args()
print 'Filename:', options.filename
app = PySimpleApp()
frame = PlotFigure()
frame.init_plot_data()
# Initialise the timer - wxPython requires this to be connected to
# the receiving event handler
t = Timer(frame, TIMER_ID)
t.Start(1000)
frame.Show()
app.MainLoop()
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_nov
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users