Hello all, I've been trying for days but I can't seem to get the result I'm looking for. I have a 2d array of type "numpy.ndarray" which I'd like to plot as a simple color map. I'd like to plot it in the upper-lefthand corner of the client area in a wxPython frame. The plotting needs to be a very simple 1:1 ratio, for example if the numpy array has 400 rows and 500 columns, I would like to plot it so that it assumes 400x500 pixels in the wxPython frame. I do not need axis ticks and labels, just the colormap plot itself. I can get my figure to plot (with tick marks and labels since I haven't figured out how to turn those off) but I cannot size it properly. I've copied a tutorial example I found and modify it and through tedious trial and error have gotten half-way to where I need:
# First attempt to render data to a window: import matplotlib matplotlib.use('WXAgg') from matplotlib import rcParams import numpy import matplotlib.cm as cm from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg #from matplotlib.figure import Figure from wx import * import DataFileTypes as DFT class DataFrame(Frame): def __init__(self): Frame.__init__(self, None, -1, "Data filename here", size=DisplaySize()) def displayData(self): data = None # Load data into "data" object using my custom IntData(...) class: try: data = DFT.INTData("C:\SAR Test files\Tibet2008.int") except DFT.DataFileError: print("Error opening data file") except DFT.ResourceFileError: print("Error opening resource file") if data: # Assume a screen dpi of 96...seems very flakey to me: ScreenDPI = 96.0 # compute the width and height of figure using this dpi # and the rows and columns of the data for a 1:1 display ratio: FigureWidthInInches = (data.numcolumns / ScreenDPI) FigureHeightInInches = (data.numrows / ScreenDPI) print(FigureWidthInInches, FigureHeightInInches) # Instantiate Figure based on these parameters: self.fig = matplotlib.figure.Figur((FigureWidthInInches,FigureHeightInInches), dpi = ScreenDPI) self.canvas = FigureCanvasWxAgg(self, -1, self.fig) # Put everything into a sizer: sizer = BoxSizer(VERTICAL) #sizer.Add(self.canvas, 1, LEFT | TOP | GROW) sizer.Add(self.canvas, 0, LEFT | TOP) self.SetSizer(sizer) # self.Fit() a = self.fig.add_axes([0.075, 0.1, 0.75, 0.85]) self.im = a.imshow(data.getNumpyArray(), interpolation=None, cmap = data.getCustomColorMap()) if __name__ == '__main__': app = PySimpleApp() frame = DataFrame() frame.displayData() frame.Show() app.MainLoop() It displays but the plot is inside the figure i.e. the colormap of the data is within the figure that I've sized. matplotlib does this by design, of course, but I cannot figure out how to defeat it. For one thing, I don't think I'm sizing the figure correctly by setting (guessing at) the dpi and computing the inches...just seems wrong, but I can't find any tutorials or examples that show anything that sizes figures using pixels or screen coords. I always know the dimensions of my data a priori, so let's assume the following very simple situation: - I have a numpy.ndarray of data with 350 rows and 500 columns. How do I display it in the upper-left hand corner of the frame client with no tick marks/labels, etc...just the colormap at screen coords(0,0)->(349,499) (rows,columns)? Could someone post a few lines to do this? Thanks so much in advance! -L ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users