Hello, I'm not familiar with the draw_artist functionality, but for me there seems to to be the following replacement needed (due to a typo):
self.ax.draw_artist(plt.contourf) -> self.ax.draw_artist(self.contour) because otherwise you are trying to draw a matplotlib function, which seems to be not reasonable and explains the error, because this function has no attribute 'draw'. Good luck. best regards Matthias On Tuesday 31 March 2009 01:45:28 Deltarodigy wrote: > Me and my team are almost to the finishing point. Our final problem is > getting the graph to update. > > When we run the graph the get the following issue: " > Traceback (most recent call last): > File "/home/gnelson/scc08whole/branch/realistic2d/gtkgui.py", line 100, > in update > self.ax.draw_artist(plt.contourf) > File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1535, in > draw_artist > a.draw(self._cachedRenderer) > AttributeError: 'function' object has no attribute 'draw'" > > Our Code is at: " http://code.google.com/p/scc08/ " > > and we are using the gtkgui.py > > import time > import gtk, gobject > import matplotlib > matplotlib.use('GTKAgg') > import matplotlib.pyplot as plt > from driver import Driver > > import numpy as np > > > class Gui: > > def updateData(self): > self.updateTemps() > self.getMats() > self.addTimeSteps() > self.getAirPts() > self.getGroundPts() > self.getBridgePts() > > def updateTemps(self): > self.temps = [] > temp = self.dr.myGrid.fields > for i in range(len(temp)): > self.temps.append([]) > for j in range(len(temp[i])): > self.temps[i].append(temp[i][j].temperature) > > def getMats(self): > self.mats = [] > temp = self.dr.myGrid.fields > for i in range(len(temp)): > self.mats.append([]) > for j in range(len(temp[i])): > self.mats[i].append(temp[i][j].density) > self.mats > > def setUserInput(self): > str = raw_input("What do you want: Ground or Air? (The default is > air) \n") > if(str == "Ground" or str == "ground"): > self.type = 1 > else: > self.type = 2 > > def getAirPts(self): > temp = self.dr.myGrid.fields > for i in range(len(temp)): > for j in range(len(temp[i])): > if(temp[i][j].material == 'air'): > self.airData.append(temp[i][j].temperature) > return > > def getBridgePts(self): > temp = self.dr.myGrid.fields > for i in range(len(temp)): > for j in range(len(temp[i])): > if(temp[i][j].material == 'concrete'): > self.bridgeData.append(temp[i][j].temperature) > return > > def getGroundPts(self): > if (type == 1): > return None > else: > temp = self.dr.myGrid.fields > for i in range(len(temp)): > for j in range(len(temp[i])): > if(temp[i][j].material == 'soil'): > self.groundData.append(temp[i][j].temperature) > return > > def addTimeSteps(self): > self.time.append(self.step) > > def update(self, *args): > print "WTF Delta?!?" > self.step = 0 > if self.background is None: > self.background = self.canvas.copy_from_bbox(self.ax.bbox) > self.updateData() > # restore the clean slate background > self.canvas.restore_region(self.background) > # update the data > print "GROUND DATA:" > print len(self.groundData) > print "TIME DATA" > print len(self.time) > if(self.type != 2): > self.groundLine = self.ax.plot(self.groundData , self.time, > 'g-+') > self.bridgeLine = self.ax.plot(self.bridgeData , self.time, > 'r-o') > self.airLine = self.ax.plot(self.airData, self.time, 'b-s') > > self.contour = self.ax2.contourf(self.temps) > self.colorbar = self.fig.colorbar(self.contour) > # just draw the animated artist > self.ax.draw_artist(self.groundLine) > self.ax.draw_artist(self.airLine) > self.ax.draw_artist(self.bridgeLine) > self.ax.draw_artist(plt.contourf) > # self.ax.draw_artist(colorbar) > # just redraw the axes rectangle > self.canvas.blit(self.ax.bbox) > > self.cnt += 1 > self.step += .004 > self.dr.run(10) > self.time.append(self.step*10) > return True > > update.cnt = 0 > update.background = None > > def setup(self): > self.fig = plt.figure() > self.ax = self.fig.add_subplot(211) > self.ax2 = self.fig.add_subplot(212) > self.canvas = self.fig.canvas > self.ax.grid() # to ensure proper background restore > self.canvas.draw() > # create some globals > self.airData = [] > self.groundData = [] > self.bridgeData = [] > self.time = [] > self.step = 0 > self.setUserInput() > self.temps = [] > self.mats = [] > self.dr = Driver(.5, .5, 0.0004, type, (7,7,9,9), (16,16)) > self.cnt = 0 > self.background = None > # don't use time steps over 4 * 10 ** -4 > self.updateTemps() > self.gmats = self.getMats() > # create the initial graphs > self.contour = self.ax2.contourf(self.temps) > self.colorbar = self.fig.colorbar(self.contour) > self.groundLine, = self.ax.plot(self.groundData , self.time, 'g-+') > self.bridgeLine, = self.ax.plot(self.bridgeData , self.time, 'r-o') > self.airLine, = self.ax.plot(self.airData , self.time, 'b-s') > > if __name__ == "__main__": > mygui = Gui() > > def start_anim(event): > gobject.idle_add(mygui.update) > mygui.canvas.mpl_disconnect(start_anim.cid) > > > mygui.setup() > start_anim.cid = mygui.canvas.mpl_connect('draw_event', start_anim) > plt.show() ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users