def test_figureimage_setdata(): fig = plt.gcf() im = FigureImage(fig) z = np.arange(12, dtype=np.float64).reshape((4, 3)) im.set_data(z) z[0, 0] = 9.9 assert im._A[0, 0] == 0, 'value changed'
def test_figureimage_setdata(): fig = plt.gcf() im = FigureImage(fig) z = np.arange(12, dtype=float).reshape((4, 3)) im.set_data(z) z[0, 0] = 9.9 assert im._A[0, 0] == 0, 'value changed'
def draw(self, renderer, *args, **kwargs): # return FigureImage.draw(self, renderer, *args, **kwargs) if (hasattr(renderer, '_vector_renderer') and isinstance(renderer._vector_renderer, RendererPdf)): pdffile_upgrade(renderer._vector_renderer.file) mixedrenderer_upgrade(renderer) gc = renderer.new_gc() import ifigure.utils.buildxobj as buildxobj o = buildxobj.CacheXObj() gc.set_alpha(self.get_alpha()) ocwd = os.getcwd() _pdffile = os.path.join(self._figobj().owndir(), self._pdf_file) os.chdir(os.path.dirname(_pdffile)) file = os.path.basename(_pdffile) obj = o.load(file) os.chdir(ocwd) self._obj = obj renderer.draw_pdf(gc, round(self.ox), round(self.oy), self._image_scale, pdfobj(obj)) gc.restore() elif (hasattr(renderer, '_vector_renderer') and isinstance(renderer._vector_renderer, RendererPS)): gc = renderer.new_gc() ps_write0 = renderer._vector_renderer._pswriter.write _eps_file = os.path.join(self._figobj().owndir(), self._eps_file) def ps_write(txt): if unicode_file: ps_write0(unicode(txt)) else: ps_write0(txt) if not hasattr(renderer._vector_renderer, '_eps_func_written'): ps_write(eps_funcs) renderer._vector_renderer._eps_func_written = True ps_write('BeginEPSF\n') ps_write( str(round(self.ox)) + ' ' + str(round(self.oy)) + ' translate\n') ps_write( str(self._image_scale[0]) + ' ' + str(self._image_scale[1]) + ' scale\n') ps_write( str(-self._eps_bbox[0]) + ' ' + str(-self._eps_bbox[1]) + ' translate\n') ps_write('%%BeginDocument: "' + os.path.basename(_eps_file) + '"\n') fid = open(_eps_file, 'r') for l in fid.readlines(): ps_write(l) fid.close() ps_write('%%EndDocument\n') ps_write('EndEPSF\n') gc.restore() else: return FigureImage.draw(self, renderer, *args, **kwargs)
class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self, parent=None, title="Colourmap Selection") self.figure = Figure(dpi=80, figsize=(2, 2)) self.canvas = Canvas(self, -1, self.figure) self.axes = self.figure.gca() x = y = numpy.linspace(-3, 3, 80) X, Y = numpy.meshgrid(x, y) V = numpy.sin(Y**2 + X**2) self.mapper = FigureImage(self.figure) im = self.axes.pcolor(x, y, V, shading='flat') try: cb = self.mapper.callbacksSM.connect('changed', ChangeCM(im)) except AttributeError: # Using 0.91 style self.mapper.add_observer(im) #self.figure.colorbar(self.mapper) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.EXPAND) self.SetSizer(sizer) self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnContext) def OnContext(self, evt): popup = wx.Menu() item = popup.Append(wx.ID_ANY, '&Grid on/off', 'Toggle grid lines') wx.EVT_MENU(self, item.GetId(), self.OnGridToggle) cmapmenu = CMapMenu(self, callback=self.OnColormap, mapper=self.mapper, canvas=self.canvas) item = popup.AppendMenu(wx.ID_ANY, "Colourmaps", cmapmenu) self.PopupMenu(popup, evt.GetPositionTuple()) def OnColormap(self, name): print "Selected colormap", name def OnGridToggle(self, event): self.axes.grid() self.canvas.draw_idle()
def __init__(self): wx.Frame.__init__(self, parent=None, title="Colourmap Selection") self.figure = Figure(dpi=80, figsize=(2, 2)) self.canvas = Canvas(self, -1, self.figure) self.axes = self.figure.gca() x = y = numpy.linspace(-3, 3, 80) X, Y = numpy.meshgrid(x, y) V = numpy.sin(Y**2 + X**2) self.mapper = FigureImage(self.figure) im = self.axes.pcolor(x, y, V, shading='flat') try: cb = self.mapper.callbacksSM.connect('changed', ChangeCM(im)) except AttributeError: # Using 0.91 style self.mapper.add_observer(im) #self.figure.colorbar(self.mapper) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.EXPAND) self.SetSizer(sizer) self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnContext)
def draw(self, renderer, *args, **kwargs): # return FigureImage.draw(self, renderer, *args, **kwargs) if (hasattr(renderer, '_vector_renderer') and isinstance(renderer._vector_renderer, RendererPdf)): pdffile_upgrade(renderer._vector_renderer.file) mixedrenderer_upgrade(renderer) gc = renderer.new_gc() import ifigure.utils.buildxobj as buildxobj o = buildxobj.CacheXObj() gc.set_alpha(self.get_alpha()) ocwd = os.getcwd() _pdffile = os.path.join(self._figobj().owndir(), self._pdf_file) os.chdir(os.path.dirname(_pdffile)) file = os.path.basename(_pdffile) obj = o.load(file) os.chdir(ocwd) self._obj = obj renderer.draw_pdf(gc, round(self.ox), round(self.oy), self._image_scale, pdfobj(obj)) gc.restore() elif (hasattr(renderer, '_vector_renderer') and isinstance(renderer._vector_renderer, RendererPS)): gc = renderer.new_gc() ps_write0 = renderer._vector_renderer._pswriter.write _eps_file = os.path.join(self._figobj().owndir(), self._eps_file) def ps_write(txt): if unicode_file: ps_write0(unicode(txt)) else: ps_write0(txt) if not hasattr(renderer._vector_renderer, '_eps_func_written'): ps_write(eps_funcs) renderer._vector_renderer._eps_func_written = True ps_write('BeginEPSF\n') ps_write(str(round(self.ox)) + ' ' + str(round(self.oy)) + ' translate\n') ps_write(str(self._image_scale[0])+' '+str(self._image_scale[1]) + ' scale\n') ps_write(str(-self._eps_bbox[0]) + ' ' + str(-self._eps_bbox[1]) + ' translate\n') ps_write('%%BeginDocument: "'+ os.path.basename(_eps_file) + '"\n') fid= open(_eps_file, 'r') for l in fid.readlines(): ps_write(l) fid.close() ps_write('%%EndDocument\n') ps_write('EndEPSF\n') gc.restore() else: return FigureImage.draw(self, renderer, *args, **kwargs)
class Frame(wx.Frame): def __init__(self): wx.Frame.__init__(self, parent=None, title="Colourmap Selection") self.figure = Figure(dpi=80, figsize=(2,2)) self.canvas = Canvas(self, -1, self.figure) self.axes = self.figure.gca() x = y = np.linspace(-3,3,80) X,Y = np.meshgrid(x,y) V = np.sin(Y**2+X**2) self.mapper = FigureImage(self.figure) im = self.axes.pcolor(x,y,V,shading='flat') try: cb = self.mapper.callbacksSM.connect('changed', ChangeCM(im)) except AttributeError: # Using 0.91 style self.mapper.add_observer(im) #self.figure.colorbar(self.mapper) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas,1,wx.EXPAND) self.SetSizer(sizer) self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnContext) def OnContext(self, evt): popup = wx.Menu() item = popup.Append(wx.ID_ANY,'&Grid on/off', 'Toggle grid lines') wx.EVT_MENU(self, item.GetId(), self.OnGridToggle) cmapmenu = CMapMenu(self, callback = self.OnColormap, mapper=self.mapper, canvas=self.canvas) item = popup.AppendMenu(wx.ID_ANY, "Colourmaps", cmapmenu) self.PopupMenu(popup, evt.GetPositionTuple()) def OnColormap(self, name): print "Selected colormap",name def OnGridToggle(self, event): self.axes.grid() self.canvas.draw()
def __init__(self): wx.Frame.__init__(self, parent=None, title="Colourmap Selection") self.figure = Figure(dpi=80, figsize=(2,2)) self.canvas = Canvas(self, -1, self.figure) self.axes = self.figure.gca() x = y = np.linspace(-3,3,80) X,Y = np.meshgrid(x,y) V = np.sin(Y**2+X**2) self.mapper = FigureImage(self.figure) im = self.axes.pcolor(x,y,V,shading='flat') try: cb = self.mapper.callbacksSM.connect('changed', ChangeCM(im)) except AttributeError: # Using 0.91 style self.mapper.add_observer(im) #self.figure.colorbar(self.mapper) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas,1,wx.EXPAND) self.SetSizer(sizer) self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnContext)
def __init__(self, data, extent, caller = None, scale = 'log', window_title = 'log plot', pixel_mask = None, plot_title = "data plot", x_label = "x", y_label = "y", parent=None): wx.Frame.__init__(self, parent=None, title=window_title, pos = wx.DefaultPosition, size=wx.Size(800,600)) print parent self.extent = extent self.data = data self.caller = caller self.window_title = window_title x_range = extent[0:2] #x_range.sort() self.x_min, self.x_max = x_range y_range = extent[2:4] #y_range.sort() self.y_min, self.y_max = y_range self.plot_title = plot_title self.x_label = x_label self.y_label = y_label self.slice_xy_range = (x_range, y_range) self.ID_QUIT = wx.NewId() self.ID_LOGLIN = wx.NewId() self.ID_UPCOLLIM = wx.NewId() self.ID_LOWCOLLIM = wx.NewId() menubar = wx.MenuBar() filemenu = wx.Menu() quit = wx.MenuItem(filemenu, 1, '&Quit\tCtrl+Q') #quit.SetBitmap(wx.Bitmap('icons/exit.png')) filemenu.AppendItem(quit) plotmenu = wx.Menu() self.menu_log_lin_toggle = plotmenu.Append(self.ID_LOGLIN, 'Plot 2d data with log color scale', 'plot 2d on log scale', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU, self.toggle_2d_plot_scale, id=self.ID_LOGLIN) menu_upper_colormap_limit = plotmenu.Append(self.ID_UPCOLLIM, 'Set upper limit of color map', 'Set upper limit of color map') self.Bind(wx.EVT_MENU, self.set_new_upper_color_limit, id=self.ID_UPCOLLIM) menu_lower_colormap_limit = plotmenu.Append(self.ID_LOWCOLLIM, 'Set lower limit of color map', 'Set lower limit of color map') self.Bind(wx.EVT_MENU, self.set_new_lower_color_limit, id=self.ID_LOWCOLLIM) #live_on_off = wx.MenuItem(live_update, 1, '&Live Update\tCtrl+L') #quit.SetBitmap(wx.Bitmap('icons/exit.png')) #live_update.AppendItem(self.live_toggle) #self.menu_log_lin_toggle.Check(True) menubar.Append(filemenu, '&File') menubar.Append(plotmenu, '&Plot') self.SetMenuBar(menubar) self.Centre() if pixel_mask == None: pixel_mask = ones(data.shape) if pixel_mask.shape != data.shape: print "Warning: pixel mask shape incompatible with data" pixel_mask = ones(data.shape) self.pixel_mask = pixel_mask self.show_data = transpose(data.copy()) #self.minimum_intensity = self.data[pixel_mask.nonzero()].min() # correct for floating-point weirdness: self.minimum_intensity = self.data[self.data > 1e-17].min() #if scale == 'log': #self.show_data = log ( self.data.copy().T + self.minimum_intensity/2.0 ) #self._scale = 'log' #self.menu_log_lin_toggle.Check(True) #elif (scale =='lin' or scale == 'linear'): #self._scale = 'lin' #self.menu_log_lin_toggle.Check(True) #self.bin_data = caller.bin_data #self.params = caller.params #fig = figure() self.fig = Figure(dpi=80, figsize=(5,5)) #self.fig = figure() fig = self.fig self.canvas = Canvas(self, -1, self.fig) self.show_sliceplots = False # by default, sliceplots on self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.canvas, 1, wx.TOP | wx.LEFT | wx.EXPAND) #self.toolbar = Toolbar(self.canvas) self.toolbar = MyNavigationToolbar(self.canvas, True, self) self.toolbar.Realize() if wx.Platform == '__WXMAC__': # Mac platform (OSX 10.3, MacPython) does not seem to cope with # having a toolbar in a sizer. This work-around gets the buttons # back, but at the expense of having the toolbar at the top self.SetToolBar(self.toolbar) else: # On Windows platform, default window size is incorrect, so set # toolbar width to figure width. tw, th = self.toolbar.GetSizeTuple() fw, fh = self.canvas.GetSizeTuple() # By adding toolbar in sizer, we are able to put it at the bottom # of the frame - so appearance is closer to GTK version. # As noted above, doesn't work for Mac. self.toolbar.SetSize(wx.Size(fw, th)) self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) self.statusbar = self.CreateStatusBar() self.statusbar.SetFieldsCount(2) self.statusbar.SetStatusWidths([-1, -2]) self.statusbar.SetStatusText("Current Position:", 0) self.canvas.mpl_connect('motion_notify_event', self.onmousemove) #self.canvas.mpl_connect('button_press_event', self.right_click_handler) #self.axes = fig.add_subplot(111) #self.axes = self.fig.gca() #ax = self.axes self.mapper = FigureImage(self.fig) #im = self.axes.pcolor(x,y,V,shading='flat') #self.mapper.add_observer(im) #self.show_data = transpose(log(self.show_data + self.minimum_intensity / 2.0)) #self.canvas.mpl_connect('pick_event', self.log_lin_select) ax = fig.add_subplot(221, label='2d_plot') fig.sx = fig.add_subplot(222, label='sx', picker=True) fig.sx.xaxis.set_picker(True) fig.sx.yaxis.set_picker(True) fig.sx.yaxis.set_ticks_position('right') fig.sx.set_zorder(1) fig.sz = fig.add_subplot(223, label='sz', picker=True) fig.sz.xaxis.set_picker(True) fig.sz.yaxis.set_picker(True) fig.sz.set_zorder(1) self.RS = RectangleSelector(ax, self.onselect, drawtype='box', useblit=True) fig.slice_overlay = None ax.set_position([0.125,0.1,0.7,0.8]) fig.cb = fig.add_axes([0.85,0.1,0.05,0.8]) fig.cb.set_zorder(2) fig.ax = ax fig.ax.set_zorder(2) self.axes = ax ax.set_title(plot_title) #connect('key_press_event', self.toggle_selector) if scale == 'log': self.show_data = log ( self.data.copy().T + self.minimum_intensity/2.0 ) self.__scale = 'log' self.fig.cb.set_xlabel('$\log_{10}I$') self.menu_log_lin_toggle.Check(True) elif (scale =='lin' or scale == 'linear'): self.__scale = 'lin' self.fig.cb.set_xlabel('$I$') self.menu_log_lin_toggle.Check(False) im = self.axes.imshow(self.show_data, interpolation='nearest', aspect='auto', origin='lower',cmap=cm.jet, extent=extent) #im = ax.imshow(data, interpolation='nearest', aspect='auto', origin='lower',cmap=cm.jet, extent=extent) fig.im = im ax.set_xlabel(x_label, size='large') ax.set_ylabel(y_label, size='large') self.toolbar.update() #zoom_colorbar(im) #fig.colorbar(im, cax=fig.cb) zoom_colorbar(im=im, cax=fig.cb) #figure(fig.number) #fig.canvas.draw() #return self.SetSizer(self.sizer) self.Fit() self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnContext) self.Bind(wx.EVT_CLOSE, self.onExit) self.sliceplots_off() self.SetSize(wx.Size(800,600)) self.canvas.draw() return
def figimage(self, X, xo=0, yo=0, alpha=None, norm=None, cmap=None, vmin=None, vmax=None, origin=None, **kwargs): """ Adds a non-resampled image to the figure. call signatures:: figimage(X, **kwargs) adds a non-resampled array *X* to the figure. :: figimage(X, xo, yo) with pixel offsets *xo*, *yo*, *X* must be a float array: * If *X* is MxN, assume luminance (grayscale) * If *X* is MxNx3, assume RGB * If *X* is MxNx4, assume RGBA Optional keyword arguments: ========= ========================================================== Keyword Description ========= ========================================================== xo or yo An integer, the *x* and *y* image offset in pixels cmap a :class:`matplotlib.colors.Colormap` instance, eg cm.jet. If *None*, default to the rc ``image.cmap`` value norm a :class:`matplotlib.colors.Normalize` instance. The default is normalization(). This scales luminance -> 0-1 vmin|vmax are used to scale a luminance image to 0-1. If either is *None*, the min and max of the luminance values will be used. Note if you pass a norm instance, the settings for *vmin* and *vmax* will be ignored. alpha the alpha blending value, default is *None* origin [ 'upper' | 'lower' ] Indicates where the [0,0] index of the array is in the upper left or lower left corner of the axes. Defaults to the rc image.origin value ========= ========================================================== figimage complements the axes image (:meth:`~matplotlib.axes.Axes.imshow`) which will be resampled to fit the current axes. If you want a resampled image to fill the entire figure, you can define an :class:`~matplotlib.axes.Axes` with size [0,1,0,1]. An :class:`matplotlib.image.FigureImage` instance is returned. .. plot:: mpl_examples/pylab_examples/figimage_demo.py Additional kwargs are Artist kwargs passed on to :class:`~matplotlib.image.FigureImage` """ if not self._hold: self.clf() im = FigureImage(self, cmap, norm, xo, yo, origin, **kwargs) im.set_array(X) im.set_alpha(alpha) if norm is None: im.set_clim(vmin, vmax) self.images.append(im) return im