From 31ac569c3e05d48a87b97357f716e47eaf71b6f5 Mon Sep 17 00:00:00 2001
From: flatberg <flatberg@pvv.ntnu.no>
Date: Tue, 24 Apr 2007 17:04:29 +0000
Subject: [PATCH] Added colorbar shortcut

---
 fluents/plots.py | 40 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/fluents/plots.py b/fluents/plots.py
index 08c331b..0795792 100644
--- a/fluents/plots.py
+++ b/fluents/plots.py
@@ -39,15 +39,18 @@ class Plot(view.View):
     def _init_mpl(self):    
         # init matplotlib related stuff 
         self._background = None
+        self._colorbar = None
         self._use_blit = False
         self.fig = Figure()
         self.canvas = FigureCanvasGTKAgg(self.fig)
         self.axes = self.fig.gca()
         self._toolbar = view.PlotToolbar(self)
+        self._key_press = self.canvas.mpl_connect(
+            'key_press_event', self.on_key_press)
         self.canvas.add_events(gtk.gdk.ENTER_NOTIFY_MASK)
         self.add(self.canvas)
         self.canvas.show()
-    
+        
     def set_frozen(self, frozen):
         """A frozen plot will not be updated when the current
         selection is changed."""
@@ -127,6 +130,34 @@ class Plot(view.View):
         if not ids : return []
         return dataset.get_indices(self.current_dim, ids)
 
+    def on_key_press(self, event):
+        if event.key == 'c':
+            self._toggle_colorbar()
+
+    def _toggle_colorbar(self):
+        if self._colorbar == None:
+            # get last created instance of mappable
+            if not self._mappable:
+                self._mappable = matplotlib.pylab.gci()
+            if self._mappable == None:
+                print "No mappable"
+                return
+            if self._mappable._A != None: # we need colormapping
+                # get axes original position
+                self._ax_last_pos = self.axes.get_position()
+                self._colorbar = self.fig.colorbar(self._mappable)
+                self._colorbar.draw_all()
+                self.canvas.draw()
+        else:
+            # remove colorbar
+            # remove, axes, observers, colorbar instance, and restore viewlims 
+            cb, ax = self._mappable.colorbar
+            self.fig.delaxes(ax)
+            self._mappable.observers = [obs for obs in self._mappable.observers if obs !=self._colorbar]
+            self._colorbar = None
+            self.axes.set_position(self._ax_last_pos)
+            self.canvas.draw()
+        
 
 class LineViewPlot(Plot):
     """Line view plot with percentiles.
@@ -170,7 +201,7 @@ class LineViewPlot(Plot):
     def _set_background(self, ax):
         """Add three patches representing [min max],[5,95] and [25,75] percentiles, and a line at the median.
         """
-        if self._data.shape[self.minor_axis]<10:
+        if self._data.shape[self.minor_axis]<6:
             return 
         # settings
         patch_color = 'b' #blue
@@ -187,7 +218,7 @@ class LineViewPlot(Plot):
         verts_0 = [] #100,0
         verts_1 = [] # 90,10
         verts_2 = [] # 75,25
-        med = []
+        med = [] 
         # add top vertices the low vertices (do i need an order?)#background
         for i in xax:
             prct = prctile(self._data.take([i], self.minor_axis), percentiles)
@@ -368,6 +399,7 @@ class ScatterPlot(Plot):
         self.sc = self.axes.scatter(self.xaxis_data, self.yaxis_data,
                                     s=self.s, c=self.c, linewidth=lw,
                                     zorder=3, **self.kw)
+        self._mappable = self.sc
         self.axes.axhline(0, color='k', lw=1., zorder=1)
         self.axes.axvline(0, color='k', lw=1., zorder=1)
         self.selection_collection = self.axes.scatter(self.xaxis_data,
@@ -470,6 +502,7 @@ class ImagePlot(Plot):
         self.axes.grid(False)
         self.axes.imshow(dataset.asarray(), interpolation='nearest')
         self.axes.axis('tight')
+        self._mappable = self.axes.images[0]
 
         # Disable selection modes
         self._toolbar.freeze_button.set_sensitive(False)
@@ -632,6 +665,7 @@ class NetworkPlot(Plot):
                                                  c=self._nodecolor,
                                                  linewidth=lw,
                                                  zorder=3)
+        self._mappable = node_collection
         # selected nodes is a transparent graph that adjust node-edge visibility
         # according to the current selection needed to get get the selected
         # nodes 'on top' as zorder may not be defined individually