Hi everyone, I use matplotlib to render a figure in a tkinter (the Tix library more precisely) canvas. It works very well but I can't turn off the autoscale (and I would like to), even by setting ax.set_autoscale_on(False). When I test with ax.get_autoscale_on(), the result is False, but the axes continues to autoscale.
I didn't had this problem in the past with ubuntu 8.04. I have it since I made the update to the 8.10 distribution so I guess that it's because the version of matplotlib I use have changed also (but I don't remember the number of this previous version). Now I use python 2.5.2, Tix 8.4.0, mpl 0.98.3, numpy 1.2.1 ppa release, scipy 0.7.0 ppa release. Here is the graphic part of my app : class GraphFrame(Tix.Frame): def __init__(self,master): Tix.Frame.__init__(self,master,bd=10) self.gen = Tix.Frame(self) self.fps = Figure(figsize=(5,4),dpi=100,facecolor='w') self.tlps = 'Phase Space' self.xlps = {'xlabel' : r'$x$','fontsize' : 16} self.ylps = {'ylabel' : r'$p$','rotation' : 'horizontal','fontsize' : 16} self.aps = self.fps.add_subplot(111) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) self.canvasps = FigureCanvasTkAgg(self.fps,master=self.gen) self.canvasps.get_tk_widget().pack(side=Tix.TOP,fill=Tix.BOTH,expand=1) self.toolbar = NavigationToolbar2TkAgg(self.canvasps, self.gen) self.toolbar.update() self.canvasps._tkcanvas.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) self.gen.grid(row=0, columnspan=14, sticky='NWSE') self.aps.set_autoscale_on(False) #doesn't work !!! # self.aps.autoscale_view(scalex=False,scaley=False) self.psLin = [] self.cl = ('r','g','b','c','y','m','k') self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick) self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease) self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion) self.cFrame = None self.press = False def ocps_connect(self): self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick) self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease) self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion) def ocps_disconnect(self): self.canvasps.mpl_disconnect(self.coch) self.canvasps.mpl_disconnect(self.crh) self.canvasps.mpl_disconnect(self.cmh) #some method I use to update the graph def psaddData_m(self,u,xmin,xmax,pmin,pmax,m=','): line = lines.Line2D(u[:,0],u[:,1], linestyle='None', marker=m, color=self.cl[np.mod(len(self.psLin)-1,6)]) self.psLin.append(line) self.psDraw(xmin,xmax,pmin,pmax) def psaddData_l(self,u,xmin,xmax,pmin,pmax,l='-'): line = lines.Line2D(u[:,0],u[:,1], linestyle=l, color=self.cl[np.mod(len(self.psLin)-1,6)]) self.psLin.append(line) self.psDraw(xmin,xmax,pmin,pmax) def psdelData(self,n): del self.psLin[n] self.aps.clear() # self.aps.cla() for l in self.psLin: self.aps.add_line(l) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) self.aps.redraw_in_frame() self.canvasps.blit() def psDraw(self,xmin,xmax,pmin,pmax): # self.aps.clear() self.aps.cla() self.aps.set_xlim(xmin,xmax) self.aps.set_ylim(pmin,pmax) for l in self.psLin: self.aps.add_line(l) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) self.aps.draw() self.canvasps.blit() # self.aps.set_autoscale_on(False) # self.aps.autoscale_view(scalex=False,scaley=False) # a = self.aps.get_autoscale_on() # print a def psifRedraw(self): self.aps.clear() # self.aps.cla() for l in self.psLin: self.aps.add_line(l) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) self.aps.redraw_in_frame() self.canvasps.blit() def psRedraw(self): self.aps.redraw_in_frame() self.canvasps.blit() # click event handling def onpsclick(self,event): Bhv=self.cFrame.stDico['psMode'].get() if event.inaxes!=self.aps: return if Bhv == 'Nothing': return self.press = True if Bhv == 'Traj': niter=int(self.cFrame.stDico['n iter'].get()) jb = self.cFrame.TrajJacob.get() if jb: lj = float(self.cFrame.TJDirlStr.get()) hj = float(self.cFrame.TJDirhderStr.get()) jnb = self.cFrame.nTrajJacob.get() if jnb: ljn = float(self.cFrame.nTJDirlStr.get()) hjn = float(self.cFrame.nTJDirhderStr.get()) v = np.array([event.xdata,event.ydata]) s = [v] if jb: sj = [Jacob(v,hj,utils.dfridr)] if jnb: sjn = [Jacob(v,hjn,utils.dfridr)] for i in xrange(0,niter): u = pm.Map(v) s.append(u) v = u if jb: sj.append(Jacob(v,hj,utils.dfridr)) if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr))) w = np.vstack(s) line = lines.Line2D(w[:,0],w[:,1],color='b') if jb: for i in xrange(len(sj)): J = sj[i] v = s[i] (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The point '+str(i+1)+' is not hyperbolic' print 'J=',J print 'l=',lr else: if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-lj*u1,v+lj*u1]) ul2 = np.vstack([v-lj*u2,v+lj*u2]) line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b') line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r') self.aps.add_line(line1) self.aps.add_line(line2) if jnb: for i in xrange(len(sjn)): J = sjn[i] v = s[i] (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The traj '+str(i+1)+' is not hyperbolic' print 'J=',J print 'l=',lr else: if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-ljn*u1,v+ljn*u1]) ul2 = np.vstack([v-ljn*u2,v+ljn*u2]) line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g') line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m') self.aps.add_line(line1) self.aps.add_line(line2) elif Bhv == '1it': v = np.array([event.xdata,event.ydata]) u = pm.Map(v) w = np.vstack([v,u]) line = lines.Line2D(w[:,0],w[:,1], linestyle='None', marker='+', markersize=10., color='k') elif Bhv == 'Preim': xmin=float(self.cFrame.stDico['pixmin'].get()) xmax=float(self.cFrame.stDico['pixmax'].get()) pmin=float(self.cFrame.stDico['pipmin'].get()) pmax=float(self.cFrame.stDico['pipmax'].get()) nx=int(self.cFrame.stDico['pinx'].get()) ny=int(self.cFrame.stDico['pinp'].get()) tol=float(self.cFrame.stDico['pitol'].get()) it=int(self.cFrame.stDico['piter'].get()) al=float(self.cFrame.stDico['pialpha'].get()) npim = self.cFrame.preimmVar.get() v = np.array([event.xdata,event.ydata]) u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al) if u != None: w = np.vstack([v,u]) else: w = v w.shape = 1,2 line = lines.Line2D(w[:,0],w[:,1], linestyle='None', marker='+', markersize=10., color='k') elif Bhv == 'Jacob': l = float(self.cFrame.DirlStr.get()) h = float(self.cFrame.DirhderStr.get()) v = np.array([event.xdata,event.ydata]) J = Jacob(v,h,utils.dfridr) (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The point is not hyperbolic' print 'J=',J print 'l=',lr return if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-l*u1,v+l*u1]) ul2 = np.vstack([v-l*u2,v+l*u2]) line = lines.Line2D(ul1[:,0],ul1[:,1],color='b') line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r') self.aps.add_line(line1) self.aps.add_line(line) # self.aps.set_title(self.tlps) # self.aps.set_xlabel(**self.xlps) # self.aps.set_ylabel(**self.ylps) self.aps.redraw_in_frame() self.canvasps.blit() def onpsmotion(self,event): Bhv=self.cFrame.stDico['psMode'].get() if event.inaxes!=self.aps: return if self.press == False: return if Bhv == 'Nothing': return self.aps.clear() # self.aps.cla() for l in self.psLin: self.aps.add_line(l) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) if Bhv == 'Traj': niter=int(self.cFrame.stDico['n iter'].get()) jb = self.cFrame.TrajJacob.get() if jb: lj = float(self.cFrame.TJDirlStr.get()) hj = float(self.cFrame.TJDirhderStr.get()) jnb = self.cFrame.nTrajJacob.get() if jnb: ljn = float(self.cFrame.nTJDirlStr.get()) hjn = float(self.cFrame.nTJDirhderStr.get()) v = np.array([event.xdata,event.ydata]) s = [v] if jb: sj = [Jacob(v,hj,utils.dfridr)] if jnb: sjn = [Jacob(v,hjn,utils.dfridr)] for i in xrange(0,niter): u = pm.Map(v) s.append(u) v = u if jb: sj.append(Jacob(v,hj,utils.dfridr)) if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr))) w = np.vstack(s) line = lines.Line2D(w[:,0],w[:,1],color='b') if jb: for i in xrange(len(sj)): J = sj[i] v = s[i] (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The point '+str(i+1)+' is not hyperbolic' print 'J=',J print 'l=',lr else: if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-lj*u1,v+lj*u1]) ul2 = np.vstack([v-lj*u2,v+lj*u2]) line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b') line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r') self.aps.add_line(line1) self.aps.add_line(line2) if jnb: for i in xrange(len(sjn)): J = sjn[i] v = s[i] (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The traj '+str(i+1)+' is not hyperbolic' print 'J=',J print 'l=',lr else: if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-ljn*u1,v+ljn*u1]) ul2 = np.vstack([v-ljn*u2,v+ljn*u2]) line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g') line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m') self.aps.add_line(line1) self.aps.add_line(line2) elif Bhv == '1it': v = np.array([event.xdata,event.ydata]) u = pm.Map(v) w = np.vstack([v,u]) line = lines.Line2D(w[:,0],w[:,1], linestyle='None', marker='+', markersize=10., color='k') elif Bhv == 'Preim': xmin=float(self.cFrame.stDico['pixmin'].get()) xmax=float(self.cFrame.stDico['pixmax'].get()) pmin=float(self.cFrame.stDico['pipmin'].get()) pmax=float(self.cFrame.stDico['pipmax'].get()) nx=int(self.cFrame.stDico['pinx'].get()) ny=int(self.cFrame.stDico['pinp'].get()) tol=float(self.cFrame.stDico['pitol'].get()) it=int(self.cFrame.stDico['piter'].get()) al=float(self.cFrame.stDico['pialpha'].get()) npim = self.cFrame.preimmVar.get() v = np.array([event.xdata,event.ydata]) u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al) if u != None: w = np.vstack([v,u]) else: w = v w.shape = 1,2 line = lines.Line2D(w[:,0],w[:,1], linestyle='None', marker='+', markersize=10., color='k') elif Bhv == 'Jacob': l = float(self.cFrame.DirlStr.get()) h = float(self.cFrame.DirhderStr.get()) v = np.array([event.xdata,event.ydata]) J = Jacob(v,h,utils.dfridr) (lr,vr) = eig(J,right=True) if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0: print 'Problem : The point is not hyperbolic' print 'J=',J print 'l=',lr return if abs(lr[0]) < 1.: u1 = vr[:,0] u2 = vr[:,1] else: u1 = vr[:,1] u2 = vr[:,0] ul1 = np.vstack([v-l*u1,v+l*u1]) ul2 = np.vstack([v-l*u2,v+l*u2]) line = lines.Line2D(ul1[:,0],ul1[:,1],color='b') line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r') self.aps.add_line(line1) self.aps.add_line(line) # self.aps.set_title(self.tlps) # self.aps.set_xlabel(**self.xlps) # self.aps.set_ylabel(**self.ylps) self.aps.redraw_in_frame() self.canvasps.blit() def onpsrelease(self,event): self.press = False self.aps.clear() # self.aps.cla() for l in self.psLin: self.aps.add_line(l) self.aps.set_title(self.tlps) self.aps.set_xlabel(**self.xlps) self.aps.set_ylabel(**self.ylps) self.aps.redraw_in_frame() self.canvasps.blit() # end I don't know if it is a bug or something else but thank you in advance if you can help me. Jonathan ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/blackberry _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users