First off, my apologies for resurrecting a 2-month old post…
I’m playing around with plotting with the Lambert transform. I want to
only plot one hemisphere at a time.
I happened to be doing exactly this recently, so I thought I’d post my approach to it.
from matplotlib.transforms import Affine2D
from matplotlib.projections import LambertAxes, register_projection
class LambertHemisphereAxes(LambertAxes):
name = 'lambert_hemisphere'
def __init__(self, *args, **kwargs):
self.horizon = kwargs.pop('horizon', 90)
self.horizon = np.radians(self.horizon)
LambertAxes.__init__(self, *args, **kwargs)
def _get_affine_transform(self):
transform = self._get_core_transform(1)
xscale, _ = transform.transform_point((self.horizon, 0))
_, yscale = transform.transform_point((0, np.pi / 2.0))
return Affine2D() \
.scale(0.5 / xscale, 0.5 / yscale) \
.translate(0.5, 0.5)
register_projection(LambertHemisphereAxes)
Plotting with a Lambert project for only one hemisphere should then be as simple as:
ax = plt.subplot(111, projection=‘lambert_hemisphere’)
I’ve attached a quick example, just to show the general idea.
Hope that helps,
-Joe
···
On Tue, 02 Mar 2010 at 3:23pm Angus McMorland wrote:
On Tue, 02 Mar 2010 at 3:23pm Angus McMorland wrote:
Hi all,
I’m playing around with plotting with the Lambert transform. I want to
only plot one hemisphere at a time.I see that if I create the appropriate axes:
ax = plt.subplot(111, projection=‘lambert’)
the resulting axis object’s ax.get_xlim() and ax.get_ylim() methods
give the limits in rads of the plot, but the corresponding
ax.set_xlim(), and ax.set_ylim() functions don’t do anything. Is there
an alternative way to achieve my goal?Many thanks,
Angus.
AJC McMorland
Post-doctoral research fellow
Neurobiology, University of Pittsburgh