axes.text() plotting text outside of axes bounds

Hello,

I’m wondering why stuff plotted with ax.text() does not get “clipped” by the axes bounds on the plot. Here’s a simple example, run with 1.3.1:

import matplotlib.pyplot as plt

(fig, ax) = plt.subplots(1,1)

for i in range(5):

for j in range(5):

ax.text(i,j, “%sx%s” % (i,j), ha=‘center’, va=‘center’)

ax.plot([0,8],[0,8])

ax.set_xlim(0,2.8)

ax.set_ylim(0,2.8)

fig.savefig(‘test.png’)

and attached output. This causes me lots of grief with basemap as well. Is there a non-brute-force trick to get these values plotted outside the axes bounds removed?

daryl

test.png

I can't quite remember what the original issue was, but I do seem to recall
that this behavior was made intentional for some reason. I honestly can't
remember why, though, and I can't fathom what circumstances that this would
be desirable...

Ben Root

···

On Wed, Jan 22, 2014 at 9:21 AM, Daryl Herzmann <akrherz@...287...> wrote:

Hello,

I'm wondering why stuff plotted with ax.text() does not get "clipped" by
the axes bounds on the plot. Here's a simple example, run with 1.3.1:

import matplotlib.pyplot as plt

(fig, ax) = plt.subplots(1,1)

for i in range(5):
  for j in range(5):
    ax.text(i,j, "%sx%s" % (i,j), ha='center', va='center')
ax.plot([0,8],[0,8])
ax.set_xlim(0,2.8)
ax.set_ylim(0,2.8)
fig.savefig('test.png')

and attached output. This causes me lots of grief with basemap as well.
Is there a non-brute-force trick to get these values plotted outside the
axes bounds removed?

daryl

Often, the text is an annotation that you would not want to have
clipped.

ax.text(i,j, "%sx%s" % (i,j), ha='center',
va='center').set_clip_on(True)

will turn the clipping on for the text.
Mike

···

On 01/22/2014 09:43 AM, Benjamin Root
wrote:

        On Wed, Jan 22, 2014 at 9:21 AM,

Daryl Herzmann <akrherz@…287…> wrote:

Hello,

              I'm wondering why stuff plotted with ax.text() does

not get “clipped” by the axes bounds on the plot.
Here’s a simple example, run with 1.3.1:

import matplotlib.pyplot as plt

(fig, ax) = plt.subplots(1,1)

for i in range(5):

for j in range(5):

                ax.text(i,j, "%sx%s" % (i,j), ha='center',

va=‘center’)

ax.plot([0,8],[0,8])

ax.set_xlim(0,2.8)

ax.set_ylim(0,2.8)

fig.savefig(‘test.png’)

              and attached output.  This causes me lots of grief

with basemap as well. Is there a non-brute-force
trick to get these values plotted outside the axes
bounds removed?

daryl

          I can't quite remember what the original issue was, but

I do seem to recall that this behavior was made
intentional for some reason. I honestly can’t remember
why, though, and I can’t fathom what circumstances that
this would be desirable…

                   -- _ |\/|o _|_ _. _ | | \.__ __|__|_|_ _ _ ._ _ | ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |

http://www.droettboom.com