[Yt-svn] yt: 2 new changesets

hg at spacepope.org hg at spacepope.org
Fri Apr 30 15:09:33 PDT 2010


hg Repository: yt
details:   yt/rev/9673d40eedfa
changeset: 1635:9673d40eedfa
user:      Matthew Turk <matthewturk at gmail.com>
date:
Thu Apr 29 21:43:09 2010 -0700
description:
We're going to use algae as our default colormap for the chaco pan-n-scan.

hg Repository: yt
details:   yt/rev/56c6eb13a002
changeset: 1636:56c6eb13a002
user:      Matthew Turk <matthewturk at gmail.com>
date:
Fri Apr 30 15:09:26 2010 -0700
description:
Merging

diffstat:

 yt/extensions/DualEPS.py                          |  696 +++++++++++++++++++++++++++
 yt/extensions/MergerTree.py                       |  100 ++-
 yt/extensions/image_panner/pan_and_scan_widget.py |   30 +-
 yt/extensions/image_panner/vm_panner.py           |    8 +-
 yt/lagos/HaloFinding.py                           |    5 +-
 yt/raven/PlotTypes.py                             |    4 +-
 6 files changed, 808 insertions(+), 35 deletions(-)

diffs (truncated from 938 to 300 lines):

diff -r a203d38d27eb -r 56c6eb13a002 yt/extensions/DualEPS.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yt/extensions/DualEPS.py	Fri Apr 30 15:09:26 2010 -0700
@@ -0,0 +1,696 @@
+"""
+DualEPS: A class to combine bitmap compression and vector graphics
+
+Author: John Wise <jwise at astro.princeton.edu>
+Date: April 2010
+Affiliation: Princeton
+Homepage: http://yt.enzotools.org/
+
+Requirements: PyX
+
+License:
+  Copyright (C) 2010 John Wise.  All Rights Reserved.
+
+  This file is part of yt.
+
+  yt is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 3 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+import pyx
+from yt.mods import *
+from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
+from matplotlib import cm
+
+class DualEPS:
+    def __init__(self, figsize=(12,12)):
+        """
+        Initializes the DualEPS class with a figure size of *figsize*
+        centimeters for a single plot.
+        """
+        pyx.unit.set(xscale=1.4)
+        self.figsize = figsize
+        self.canvas = None
+        self.colormaps = None
+        self.axes_drawn = False
+
+    def hello_world(self):
+        """
+        A simple test.
+        """
+        if self.canvas is None:
+            self.canvas = pyx.canvas.canvas()
+        p = pyx.path.line(0,0,1,1)
+        self.canvas.stroke(p)
+        self.canvas.text(0,0, "Hello world.")
+
+#=============================================================================
+
+    def axis_box(self, xrange=(0,1), yrange=(0,1), xlabel="", ylabel="",
+                 xlog=False, ylog=False, tickcolor=None, bare_axes=False,
+                 pos=(0,0), xaxis_side=0, yaxis_side=0):
+        """
+        Draws an axis box at position *pos* with a range of *xrange*
+        and *yrange*, labels *xlabel* and *ylabel*.  The colors of the
+        tickmarks can be specified with *tickcolor*.  For no tick
+        labels or marks, set *bare_axes* to True.  For the x-axis
+        (y-axis) labels to be on the right (top), set *xaxis_side*
+        (*yaxis_side*) to 1.
+        """
+        if tickcolor is None:
+            c1 = pyx.graph.axis.painter.regular\
+                 (tickattrs=[pyx.color.cmyk.black])
+            c2 = pyx.graph.axis.painter.regular\
+                 (tickattrs=[pyx.color.cmyk.black], labelattrs=None)
+        else:
+            c1 = pyx.graph.axis.painter.regular(tickattrs=[tickcolor])
+            c2 = pyx.graph.axis.painter.regular\
+                 (tickattrs=[tickcolor], labelattrs=None)
+
+        xticklabels = True
+        yticklabels = True
+        if xaxis_side == 0:
+            xleftlabel = xlabel
+            xrightlabel = ""
+            c1x = c1
+            c2x = c2
+        elif xaxis_side == 1:
+            xleftlabel = ""
+            xrightlabel = xlabel
+            c1x = c2
+            c2x = c1
+        else:
+            xticklabels = False
+            xleftlabel = ""
+            xrightlabel = ""
+            c1x = c1
+            c2x = c2
+        if yaxis_side == 0:
+            yleftlabel = ylabel
+            yrightlabel = ""
+            c1y = c1
+            c2y = c2
+        elif yaxis_side == 1:
+            yleftlabel = ""
+            yrightlabel = ylabel
+            c1y = c2
+            c2y = c1
+        else:
+            yticklabels = False
+            yleftlabel = ""
+            yrightlabel = ""
+            c1y = c1
+            c2y = c2
+
+        if xlog:
+            if xticklabels:
+                xaxis = pyx.graph.axis.log(min=xrange[0],max=xrange[1],
+                                           title=xleftlabel, painter=c1x)
+                xaxis2 = pyx.graph.axis.log(min=xrange[0],max=xrange[1],
+                                            title=xrightlabel, painter=c2x)
+            else:
+                xaxis = pyx.graph.axis.log(min=xrange[0],max=xrange[1],
+                                           title=xleftlabel, painter=c1x,
+                                           parter=None)
+                xaxis2 = pyx.graph.axis.log(min=xrange[0],max=xrange[1],
+                                            title=xrightlabel, painter=c2x,
+                                            parter=None)
+        else:
+            if xticklabels:
+                xaxis = pyx.graph.axis.lin(min=xrange[0],max=xrange[1],
+                                           title=xleftlabel, painter=c1x)
+                xaxis2 = pyx.graph.axis.lin(min=xrange[0],max=xrange[1],
+                                            title=xrightlabel, painter=c2x)
+            else:
+                xaxis = pyx.graph.axis.lin(min=xrange[0],max=xrange[1],
+                                           title=xleftlabel, painter=c1x,
+                                           parter=None)
+                xaxis2 = pyx.graph.axis.lin(min=xrange[0],max=xrange[1],
+                                            title=xrightlabel, painter=c2x,
+                                            parter=None)
+        if ylog:
+            if yticklabels:
+                yaxis = pyx.graph.axis.log(min=yrange[0],max=yrange[1],
+                                           title=yleftlabel, painter=c1y)
+                yaxis2 = pyx.graph.axis.log(min=yrange[0],max=yrange[1],
+                                            title=yrightlabel, painter=c2y)
+            else:
+                yaxis = pyx.graph.axis.log(min=yrange[0],max=yrange[1],
+                                           title=yleftlabel, painter=c1y,
+                                           parter=None)
+                yaxis2 = pyx.graph.axis.log(min=yrange[0],max=yrange[1],
+                                            title=yrightlabel, painter=c2y,
+                                            parter=None)
+        else:
+            if yticklabels:
+                yaxis = pyx.graph.axis.lin(min=yrange[0],max=yrange[1],
+                                           title=yleftlabel, painter=c1y)
+                yaxis2 = pyx.graph.axis.lin(min=yrange[0],max=yrange[1],
+                                            title=yrightlabel, painter=c2y)
+            else:
+                yaxis = pyx.graph.axis.lin(min=yrange[0],max=yrange[1],
+                                           title=yleftlabel, painter=c1y,
+                                           parter=None)
+                yaxis2 = pyx.graph.axis.lin(min=yrange[0],max=yrange[1],
+                                            title=yrightlabel, painter=c2y,
+                                            parter=None)
+
+        if bare_axes:
+            if ylog:
+                yaxis = pyx.graph.axis.log(min=yrange[0], max=yrange[1],
+                                           title=yleftlabel, parter=None)
+                yaxis2 = pyx.graph.axis.log(min=yrange[0], max=yrange[1],
+                                            title=yrightlabel, parter=None)
+            else:
+                yaxis = pyx.graph.axis.lin(min=yrange[0], max=yrange[1],
+                                           title=yleftlabel, parter=None)
+                yaxis2 = pyx.graph.axis.lin(min=yrange[0], max=yrange[1],
+                                            title=yrightlabel, parter=None)
+            if xlog:
+                xaxis = pyx.graph.axis.log(min=xrange[0], max=xrange[1],
+                                           title=xleftlabel, parter=None)
+                xaxis2 = pyx.graph.axis.log(min=xrange[0], max=xrange[1],
+                                            title=xrightlabel, parter=None)
+            else:
+                xaxis = pyx.graph.axis.lin(min=xrange[0], max=xrange[1],
+                                           title=xleftlabel, parter=None)
+                xaxis2 = pyx.graph.axis.lin(min=xrange[0], max=xrange[1],
+                                            title=xrightlabel, parter=None)
+
+        blank_data = pyx.graph.data.points([(-1,-1),(-0.99,-0.99)], x=1,y=2)
+        if self.canvas is None:
+            self.canvas = pyx.graph.graphxy \
+                          (width=self.figsize[0], height=self.figsize[1],
+                           x=xaxis, y=yaxis, x2=xaxis2, y2=yaxis2,
+                           xpos=pos[0], ypos=pos[1])
+            self.canvas.plot(blank_data)
+        else:
+            plot = pyx.graph.graphxy \
+                   (width=self.figsize[0], height=self.figsize[1],
+                    x=xaxis, y=yaxis, x2=xaxis2, y2=yaxis2,
+                    xpos=pos[0], ypos=pos[1])
+            plot.plot(blank_data)
+            self.canvas.insert(plot)
+        self.axes_drawn = True
+
+#=============================================================================
+
+    def axis_box_yt(self, plot, units=None, bare_axes=False, **kwargs):
+        plot._redraw_image()
+        if isinstance(plot, raven.PlotTypes.VMPlot):
+            if units == None:
+                # Determine the best units
+                astro_units = ['cm', 'rsun', 'au', 'pc', 'kpc', 'Mpc']
+                best_fit = 0
+                while plot.width*plot.pf[astro_units[best_fit]] > 1e3 and \
+                          best_fit < len(astro_units):
+                    best_fit += 1
+                units = astro_units[best_fit]
+            _xrange = (0, plot.width * plot.pf[units])
+            _yrange = (0, plot.width * plot.pf[units])
+            _xlog = False
+            _ylog = False
+            if bare_axes:
+                _xlabel = ""
+                _ylabel = ""
+            else:
+                _xlabel = '%s (%s)' % (lagos.x_names[plot.data.axis], units)
+                _ylabel = '%s (%s)' % (lagos.y_names[plot.data.axis], units)
+            _tickcolor = pyx.color.cmyk.white
+        else:
+            _xrange = plot._axes.get_xlim()
+            _yrange = plot._axes.get_ylim()
+            _xlog = plot._log_x
+            _ylog = plot._log_y
+            if bare_axes:
+                _xlabel = ""
+                _ylabel = ""
+            else:
+                _xlabel = plot._x_label
+                _ylabel = plot._y_label
+            _tickcolor = None
+        self.axis_box(xrange=_xrange, yrange=_yrange, xlabel=_xlabel,
+                      ylabel=_ylabel, tickcolor=_tickcolor, xlog=_xlog,
+                      ylog=_ylog, bare_axes=bare_axes, **kwargs)
+
+#=============================================================================
+
+    def insert_image(self, filename, pos=(0,0)):
+        """
+        Inserts a JPEG file *filename* at *pos*.
+        """
+        image = pyx.bitmap.jpegimage(filename)
+        self.canvas.insert(pyx.bitmap.bitmap(pos[0], pos[1], image,
+                                             compressmode=None,
+                                             width=self.figsize[0],
+                                             height=self.figsize[1]))
+
+#=============================================================================
+
+    def insert_image_yt(self, plot, pos=(0,0)):
+        """
+        Inserts a bitmap taken from a yt plot.  For best results, set
+        use_colorbar=False when creating the yt image.
+        """
+        # We need to remove the colorbar (if necessary), remove the
+        # axes, and resize the figure to span the entire figure
+        if plot.colorbar != None and \
+               isinstance(plot, raven.PlotTypes.VMPlot):
+            print "WARNING: Image (slices, projections, etc.) plots must not"\
+                  "have a colorbar."
+            print "Removing it."
+            plot.colorbar = None
+        if self.canvas is None:
+            self.canvas = pyx.canvas.canvas()
+        plot._redraw_image()
+        _p1 = plot._figure
+        if isinstance(plot, raven.PlotTypes.ProfilePlot):
+            # Remove colorbar
+            _p1.delaxes(_p1.axes[1])
+        _p1.axes[0].set_axis_off()  # remove axes
+        _p1.axes[0].set_position([0,0,1,1])  # rescale figure
+        _p1.set_facecolor('w')  # set background color
+        figure_canvas = FigureCanvas(_p1)
+        figure_canvas.draw()
+        size = _p1.get_size_inches() * _p1.dpi
+        image = pyx.bitmap.image(size[0], size[1], "RGB",
+                                 figure_canvas.tostring_rgb())
+        figure_canvas.print_png('test.png')
+        self.canvas.insert(pyx.bitmap.bitmap(pos[0], pos[1], image,
+                                             width=self.figsize[0],
+                                             height=self.figsize[1]))
+
+#=============================================================================
+
+    def colorbar(self, name, zrange=(0,1), label="", log=False, tickcolor=None,
+                 orientation="right", pos=[0,0], shrink=1.0):
+        """



More information about the yt-svn mailing list