Skip to content

adding check_xytext for NaN values #30381

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

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
check xytext
  • Loading branch information
AndrGutierrez committed Aug 3, 2025
commit 190937839d810759d3459b3f862a2902227a444e
20 changes: 18 additions & 2 deletions lib/matplotlib/text.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import functools
import logging
import math
import numbers
from numbers import Real
import weakref

Expand Down Expand Up @@ -1862,6 +1863,7 @@ def transform(renderer) -> Transform
xy,
xycoords=xycoords,
annotation_clip=annotation_clip)
self.xytext = xytext
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
self.xytext = xytext
self._xytext = xytext

If this is done it should be private. End users should not be accessing it.

But actually I think it would be cleaner to not set this and instead use self.get_position() within _check_xytext.

# warn about wonky input data
if (xytext is None and
textcoords is not None and
Expand Down Expand Up @@ -2027,7 +2029,12 @@ def draw(self, renderer):
# docstring inherited
if renderer is not None:
self._renderer = renderer
if not self.get_visible() or not self._check_xy(renderer):

visible = (self.get_visible() and
self._check_xy(renderer) and
self._check_xytext())

if not visible:
return
# Update text positions before `Text.draw` would, so that the
# FancyArrowPatch is correctly positioned.
Expand All @@ -2046,7 +2053,10 @@ def get_window_extent(self, renderer=None):
# docstring inherited
# This block is the same as in Text.get_window_extent, but we need to
# set the renderer before calling update_positions().
if not self.get_visible() or not self._check_xy(renderer):
visible = (self.get_visible() and
self._check_xy(renderer) and
self._check_xytext())
if not visible:
return Bbox.unit()
if renderer is not None:
self._renderer = renderer
Expand All @@ -2072,4 +2082,10 @@ def get_tightbbox(self, renderer=None):
return super().get_tightbbox(renderer)


def _check_xytext(self, renderer=None):
Copy link
Member

Choose a reason for hiding this comment

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

I would put this method just after the _check_xy method, since they fulfil related purposes.

"""Check whether the annotation at *xy_pixel* should be drawn."""
valid = True
if all(isinstance(xyt, numbers.Number) for xyt in self.xytext):
valid = not np.isnan(self.xytext).any()
return valid
_docstring.interpd.register(Annotation=Annotation.__init__.__doc__)