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()

-- 
View this message in context: 
http://www.nabble.com/We-are-on-the-Home-strech-and-NEED-help-tp22795527p22795527.html
Sent from the matplotlib - users mailing list archive at Nabble.com.


------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to