Skip to content

sticky_edges behavior is not consistent within/across subpots #15967

@mwaskom

Description

@mwaskom

Bug report

Bug summary

I am trying to draw lines that do not get a margin placed around them when the axis is autoscaled. My understanding is that the current way to accomplish that is with Artist.sticky_edges. But I am finding that while this works within a single Axes, it does not work across multiple Axes

Code for reproduction

This works:

f, ax = plt.subplots()

ax.scatter([0, 1], [0, 0])
x1 = ax.get_xlim()
line, = ax.plot(x1, [0, 0])
line.sticky_edges.x[:] = x1

ax.scatter([0, 1], [1, 1])
x2 = ax.get_xlim()
line, = ax.plot(x2, [1, 1])
line.sticky_edges.x[:] = x2

assert x1 == x2

While this fails:

f, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)

ax1.scatter([0, 1], [0, 0])
x1 = ax1.get_xlim()
line, = ax1.plot(x1, [0, 0])
line.sticky_edges.x[:] = x1

ax2.scatter([0, 1], [1, 1])
x2 = ax2.get_xlim()
line, = ax2.plot(x2, [1, 1])
line.sticky_edges.x[:] = x2

assert x1 == x2

Is this expected to work? I know there are active changes to the autoscaling behavior; is this a bug that has been fixed (I'm not in a position to test things on a development build right now). Is there a different way to accomplish "ignore an artist when autoscaling"?

Matplotlib version

  • Operating system: macos
  • Matplotlib version: 3.1.1
  • Matplotlib backend (print(matplotlib.get_backend())): inline
  • Python version: 3.7

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions