]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
Finally get the plot defaults to behave (maybe).
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 11 May 2012 02:16:28 +0000 (22:16 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 11 May 2012 02:16:28 +0000 (22:16 -0400)
mjo/plot.py

index 0eaf079fa5343bed2b32d6747bf0ab6f69995ed6..b301e307aa30514d8865ba9ac7423c5b7170a8fa 100644 (file)
@@ -1,38 +1,48 @@
+"""
+Plotting helpers.
+
+ * We set the default tick_formatter to 'latex'.
+
+ * We replace the plot() function with our own version that sets some
+   default legend options.
+
+"""
+
 from sage.all import *
 
-# Save the default so that we can call it within mjo_plot.
+# Graphics.SHOW_OPTIONS contains the default options that will be
+# passed to show(). It already handles merging the user-specified
+# options, so we just tap into that power.
+show_opts = sage.plot.graphics.Graphics.SHOW_OPTIONS
+show_opts['tick_formatter'] = 'latex'
+
+# Save the default plot() function so that we can call it within
+# mjo_plot and not die of recursion.
 sage_plot = plot
 
 def mjo_plot(*args, **kwargs):
     """
     Replacement for the default plot function.
 
-     - Use the 'latex' tick formatter.
-
      - If there's a legend, set the background color to 'white' and
        give it a drop shadow.
 
     """
-    plot_opts = { 'tick_formatter': 'latex' }
-
-    # Merge the user's plot options with mine. The ones given as
-    # kwargs should override the defaults!
-    plot_opts.update(kwargs)
-    kwargs = plot_opts
-
-    p = sage_plot(*args, **kwargs)
-
-    # Merge the user's legend options with mine. The ones passed to us
-    # should override the defaults!
     default_legend_opts = { 'back_color': 'white',
                             'shadow': True }
-    default_legend_opts.update(p._Graphics__legend_opts)
-    p._Graphics__legend_opts = default_legend_opts
+
+    # Create an empty plot using the default options.
+    p = Graphics()
+    p.set_legend_options(**default_legend_opts)
+
+    # After trac #12936, this should propagate those options.
+    p += sage_plot(*args, **kwargs)
 
     return p
 
+
 # Replace both the global `plot` and the ones in the modules. I am
 # unclear about why this is necessary, and don't care too much.
+plot = mjo_plot
 sage.plot.plot.plot = mjo_plot
 sage.plot.all.plot = mjo_plot
-plot = mjo_plot