Skip to content

.set_data() errors if number of points change #8516

Closed

Description

@Rufflewind

Bug report

Bug summary

Cannot call .set_data() to update a line with a different number of points.

import matplotlib.pyplot as plt

plt.ion()
[line] = plt.plot([1.0, 2.0], [3.0, 4.0])
line.set_data([1.0, 2.0, 3.0], [3.0, 4.0, 5.0]) # <-- error!

Actual outcome

Traceback (most recent call last):
  File "/tmp/foo.py", line 5, in <module>
    line.set_data([1.0, 2.0, 3.0], [3.0, 4.0, 5.0])
  File "/usr/lib/python3.6/site-packages/matplotlib/lines.py", line 642, in set_data
    self.set_xdata(x)
  File "/usr/lib/python3.6/site-packages/matplotlib/lines.py", line 1222, in set_xdata
    self.stale = True
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 279, in stale
    self.stale_callback(self, val)
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 76, in _stale_axes_callback
    self.axes.stale = val
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 279, in stale
    self.stale_callback(self, val)
  File "/usr/lib/python3.6/site-packages/matplotlib/figure.py", line 56, in _stale_figure_callback
    self.figure.stale = val
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 279, in stale
    self.stale_callback(self, val)
  File "/usr/lib/python3.6/site-packages/matplotlib/pyplot.py", line 588, in _auto_draw_if_interactive
    fig.canvas.draw_idle()
  File "/usr/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 1993, in draw_idle
    self.draw(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 467, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 68, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3.6/site-packages/matplotlib/figure.py", line 1248, in draw
    renderer, self, artists, self.suppressComposite)
  File "/usr/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 68, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2402, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/usr/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib/python3.6/site-packages/matplotlib/artist.py", line 68, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3.6/site-packages/matplotlib/lines.py", line 757, in draw
    self.recache()
  File "/usr/lib/python3.6/site-packages/matplotlib/lines.py", line 674, in recache
    raise RuntimeError('xdata and ydata must be the same length')
RuntimeError: xdata and ydata must be the same length

Expected outcome

This used to work just fine in Matplotlib-2.0.0 (stable). Nope it didn’t work on 2.0.0 (stable) either.

Matplotlib version

  • Operating System: Arch Linux
  • Matplotlib Version: 2.0.0+4136.g791b28149.dirty
  • Python Version: 3.6.0

Python was installed from extra/python through Pacman. Matplotlib was installed from aur/python-matplotlib-git, which sources directly from GitHub with minimal modifications.

Activity

  1. tacaswell commented on Apr 20, 2017

    @tacaswell
    Member

    What backend are you using?

    This looks like this is due to some over-agressive auto-redraw logic with interactive plots with a non-interactive backend.

  2. Rufflewind commented on Apr 20, 2017

    @Rufflewind
    ContributorAuthor

    Oh, you’re right. I was using Agg. I guess this was a consequence of #8518, but I didn’t realize the two issues were related. I thought I tested this on 2.0.0 (stable) and got different results, but now I find that the test case didn’t work on 2.0.0- (stable) either, so I guess this isn’t a bug.

  3. tacaswell commented on Apr 20, 2017

    @tacaswell
    Member

    It is definitely bug-adjacent and leaves some very sharp edges in the code base.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions