Skip to content

Use left/right top/bottom instead of width/height in Rectangle #9072

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 4, 2017

Conversation

dstansby
Copy link
Member

This changes the transform in Rectangle to use transforms.Bbox.from_extents instead of transforms.Bbox.from_bounds. This allows for rectangles whose "width" may be a different type to the actual coordinates (eg. datetime for coords and timedelta for width/height).

The api is maintained as before, all that has changed is stuff under the hood.

Fixes #4916, thanks to @pganssle for the idea.

@pganssle
Copy link
Member

Excellent, I think this is a much better solution. I have two suggestions for improvement:

  1. I think that a test should be added to check that something like patch = mpatches.Rectangle((datetime(2017, 1, 1), 0), datetime(1970, 1, 5), 1) also fails - I think that bug is also fixed by this patch. (I made a PR against your branch with this additional test).
  2. Presumably test_datetime_rectangle() should be be an image_comparison test, since it generates actual output? Or something should otherwise be asserted other than "this doesn't raise an error"?

@dstansby
Copy link
Member Author

The reason I didn't do it as an image test is because the axis isn't formatted as datetime (an independent bug), so it would only be changed when that bug is fixed. Thanks for the extra test, I'll merge it.

@dstansby
Copy link
Member Author

Right, this should be working now... once the tests pass I'll squash down to a couple of commits.

@dstansby
Copy link
Member Author

All good to go!

Copy link
Member

@efiring efiring left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks reasonable, apart from the question about get_bbox.

self.stale = True

def get_bbox(self):
return transforms.Bbox.from_bounds(self._x, self._y,
self._width, self._height)
return transforms.Bbox.from_extents(self._x0, self._y0,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't this need to use the unit conversions, as in _update_patch_transform()?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it probably does, but no-one every added it originally. I'll add it in another commit.

@dstansby
Copy link
Member Author

I've also taken the opportunity to clean the docstring, since it needed changing anyway.

@dstansby dstansby added this to the 2.2 (next next feature release) milestone Sep 19, 2017
@jklymak
Copy link
Member

jklymak commented Dec 2, 2017

@dstansby this has been reviewed twice, so should be good to go, but there is a conflict.

@dopplershift dopplershift merged commit f866168 into matplotlib:master Dec 4, 2017
@dstansby dstansby deleted the rect-timedelta branch December 4, 2017 22:21
self.stale = True

def get_bbox(self):
return transforms.Bbox.from_bounds(self._x, self._y,
self._width, self._height)
x0, y0, x1, y1 = self._convert_units()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this call to convert_units? Am I missing a side effect or was this meant to be passed to the from_extents call?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The _x0, _y0 etc. coords are now all stored in the class with units attached, so this strips the units because I don't think from_extents takes units.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but the next line passes in self._x0 etc not x0.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I see. PR incoming

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants