transform question

Hi MPL transform gurus (aka Mike),

I'm trying to close on this "dropped spine" thing, and I have a question
I think you could save me some time on.

I need to get a transform that will be combined with the normal xaxis
transform to shift the spine and associated ticks and tick labels by
some amount. For my first incarnation, I used something like

mtransforms.ScaledTranslation(offset_x,offset_y,self.figure.dpi_scale_trans)

This is fine when I new the offset in points directly. However, now I'd
like to support offsetting the spine to the center of the Axes. So, for
this case, I'd like to calculate the offset transform required to take
axes coordinate 0 and translate it to 0.5. Thus, I think I need
something like

mtransforms.ScaledTranslation(0.5, 0, self.axes.transAxes)

Unfortunately, that's clearly not working. So, is there a quick fix for
this?

Note that, as I've implemented things, the easiest path is that the new
transform is a translation combined with the existing xaxis transform
(using "get_xaxis_transform() + my_new_transform"). Other methods may be
possible, but I think they'll be a lot more work.

Thanks,
Andrew

This is off the top of my head. I haven't really been following this thread and I wasn't able to determine which was the most current patch to apply.

It looks like you don't actually want to apply the axes transform twice (which get_xaxis_transform() + mtransforms.ScaledTranslation(0.5, 0, self.axes.transAxes) would do).

What seems to work for me is to transform the input coordinates *before* applying the existing axis transform:

    mtransforms.Affine2D().translate(0.0, 0.5) + self.get_xaxis_transform()

I would suggest that you could keep two kinds of spine transforms (those relative to the axes and those given in points) separate. Build the whole pipeline all the time and then just allow the user to tweak either or both, and thus have something like:

    transform_by_axes_units + self.get_xaxis_transform() + transform_by_points

Using them in combination may be rare, but isn't completely nonsensical.

Hope that helps,
Mike

Andrew Straw wrote:

···

Hi MPL transform gurus (aka Mike),

I'm trying to close on this "dropped spine" thing, and I have a question
I think you could save me some time on.

I need to get a transform that will be combined with the normal xaxis
transform to shift the spine and associated ticks and tick labels by
some amount. For my first incarnation, I used something like

mtransforms.ScaledTranslation(offset_x,offset_y,self.figure.dpi_scale_trans)

This is fine when I new the offset in points directly. However, now I'd
like to support offsetting the spine to the center of the Axes. So, for
this case, I'd like to calculate the offset transform required to take
axes coordinate 0 and translate it to 0.5. Thus, I think I need
something like

mtransforms.ScaledTranslation(0.5, 0, self.axes.transAxes)

Unfortunately, that's clearly not working. So, is there a quick fix for
this?

Note that, as I've implemented things, the easiest path is that the new
transform is a translation combined with the existing xaxis transform
(using "get_xaxis_transform() + my_new_transform"). Other methods may be
possible, but I think they'll be a lot more work.

Thanks,
Andrew
  
--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA