Dear all,

I wrote an application allowing to display an imshow image in one part of a Tk 
GUI and the corresponding colorbar in another part. This allows me to work on 
the image with more freedom. My problem is then to save the result which 
implies getting the 2 axes into another figure. I've been fighting for some 
time but I can't get it right. The problem in the end is that I don't really 
understand the exact link between: figure <-> canvas <-> axes. I guessed that 
one creates a Figurecanvas which is the GUI link where to put the figure which 
itself contains the axes. But when I tried to get the axes and put them into a 
new figure, they don't appear...

Can anyone give me a hint on what I did wrong ? I'm using matplotlib v.0.90.1

The code looks something like:

------
########## init part ###########
import matplotlib as mpl
mpl.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

########## creating GUI elements ###########
#create figures
self.mplfImageDisplay  = 
mpl.figure.Figure(figsize=(5,4),dpi=100,facecolor='white')
self.mplfImageColorbar = 
mpl.figure.Figure(figsize=(0.7,4),dpi=100,facecolor='white')

 #add tk.DrawingArea
 self.cvImageDisplay = 
FigureCanvasTkAgg(self.mplfImageDisplay,master=leftPaneImage)
 self.cvImageDisplay.get_tk_widget().pack()
 self.cvImageColorbar = 
FigureCanvasTkAgg(self.mplfImageColorbar,master=centerPaneImage)
 self.cvImageColorbar.get_tk_widget().pack()

 #pack all in main frame
 self.cvImageDisplay._tkcanvas.pack()
 self.cvImageColorbar._tkcanvas.pack()

########## adding axes to GUI elements ###########
#get data (2d matrix)
self.finaldata = self.build_data()

#define first axes (image)
self.axes1 = self.mplfImageDisplay.gca(frameon=False)
self.axes1.set_position((0.015,0.02,0.98,0.96))
display = self.axes1.imshow(self.finaldata,
                                           origin='upper',
                                           aspect='auto',
                                           interpolation=interpolation,
                                           cmap=imagecolormap,
                                           vmin=minvalue,
                                           vmax=maxvalue)
self.axes1.set_axis_off()

#define colorbar
self.axes2 = self.mplfImageColorbar.gca()
self.axes2.set_position((0.1,0.05,barsize,0.9))
self.colorbar = figcolorbar.colorbar(display,
                                                     format='%'+legendformat,
                                                     cax=self.axes2)
#set font size
colorbartextlist = self.axes2.get_yticklabels()
for element in colorbartextlist: element.set_fontsize(fontsize)

#display image
self.cvimage.show()
cvcolorbar.show()

########## saving result ###########
 #get current figure
image = self.mplfImageDisplay.gca()
colorbar = self.mplfImageColorbar.gca()

#calculate fig width
imagewidth = self.mplfImageDisplay.get_figwidth()
colorbarwidth  = self.mplfImageColorbar.get_figwidth()
totalwidth = imagewidth + colorbarwidth

 #calculate fig height
 imageheight    = self.mplfImageDisplay.get_figheight()
 colorbarheight = self.mplfImageColorbar.get_figheight()
 totalheight = max(imageheight,colorbarheight)
 
#create new figure
outputfigure = 
mpl.figure.Figure(figsize=(totalwidth,totalheight),dpi=100,facecolor='white')

#add axes
outputfigure.add_axes(axes=image,anchor='w')

outputfigure.add_axes(axes=colorbar,anchor='e')


#I also tried playing about adding a canvas but it didn't help much
#cvouputfigure = FigureCanvasTkAgg(outputfigure)
#outputfigure.draw(cvouputfigure.get_renderer())

#save figure
outputfigure.savefig(outputfilename)
------







      
_____________________________________________________________________________ 
Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail 
http://mail.yahoo.fr
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to