Hi Mario,

(Sorry for the reply to a reply, but I was not on the list when the original message was posted)

This may not be useful for Basemap, but I did this with the matplotlib.projections.geo HammerAxes projection. I got it to work by subclassing that and modifying the _get_affine_transform() to negate the x-axis scale. I also seem to have had to fiddle with _set_lim_and_transforms() to account for this, though I don't remember the details.

In any case, I don't know how Basemap works and whether this is helpful. Maybe as inspiration... The code is below if it helps.

joey

Hi,

I'm looking at Basemap as a backend for plotting maps of the sky in

different projections, and so far it seems like a really good match!

Excellent work!

The only problem that I don't know how to solve is that in astronomy

the longitude on maps typically increases from right to left (we're

looking at the celestial sphere from the "inside"). Is there any way (or

a trick) to make Basemap do this?

Regards,

class AstroHammerAxes(HammerAxes):

"""Astronomical hammer projection.

This is just a Hammer projection with the longitude axis

reversed left-right.

"""

name='astrohammer'

def _get_affine_transform(self):

"""get affine transform

This is cribbed from GeoAxes, but negates the xscale

to put positive longitude to the left. Not sure this

is actually robust.

"""

transform=self._get_core_transform(1)

xscale,_=transform.transform_point((pi,0))

_,yscale=transform.transform_point((0,pi/2.0))

return Affine2D()\

.scale(-0.5/xscale, 0.5/yscale)\

.translate(0.5,0.5)

def _set_lim_and_transforms(self):

HammerAxes._set_lim_and_transforms(self)

yaxis_stretch = Affine2D().scale(pi * 2.0, 1.0).translate(pi, 0.0)

yaxis_space = Affine2D().scale(1.0, 1.1)

yaxis_text_base = \

yaxis_stretch + \

self.transProjection + \

(yaxis_space + \

self.transAffine + \

self.transAxes)

self._yaxis_text1_transform = \

yaxis_text_base + \

Affine2D().translate(-8.0, 0.0)

self._yaxis_text2_transform = \

yaxis_text_base + \

Affine2D().translate(8.0, 0.0)

# register the projection on import

register_projection(AstroHammerAxes)

## ···

On Sep 18, 2010, at 6:02 AM, Jeff Whitaker wrote:

On 9/16/10 12:38 PM, Mario Juric wrote: