Skip to content

Crash when interactively adding a number of subplots #11123

@mdovgialo

Description

@mdovgialo

Bug report

Bug summary

Adding subplots repeatedly to a figure in interactive mode can sometimes crash Matplotlib version 2.2.2, in version 2.0.2 everything works. Sometimes it does not crash, but when you resize figure's window to make it significantly smaller it crashes every time. I'm using Matplotlib on Kubuntu 16.04 64 bit with Python 3.5.2.

Code for reproduction

import matplotlib.pyplot as plt
import time

plt.ion()

def test_subplot_crash_with_matplotlib222():
    plt.ion()

    import matplotlib
    print("Matplotlib ver", matplotlib.__version__)
    fig = plt.figure()
    fig.set_size_inches(10, 10)
    for i in range(100):
        ax = fig.add_subplot(10, 10, i+1)
        ax.plot([0, 1], [0, 1])
        fig.tight_layout()
        fig.canvas.flush_events()
        print(i)
        time.sleep(0.01)
        if i == 25:
            fig.set_size_inches(3, 3)
    plt.ioff()
    plt.show()

if __name__ == '__main__':
    test_subplot_crash_with_matplotlib222()

Actual outcome

While adding 25th subplot it crashes. You can crash it earlier if you manually resize the window to make it smaller.

Traceback (most recent call last):
  File "tests/test_crash_matplotlib222.py", line 28, in <module>
    test_subplot_crash_with_matplotlib222()
  File "tests/test_crash_matplotlib222.py", line 18, in test_subplot_crash_with_matplotlib222
    ax = fig.add_subplot(10, 10, i+1)
  File "/home/marian/.local/lib/python3.5/site-packages/matplotlib/figure.py", line 1239, in add_subplot
    a = subplot_class_factory(projection_class)(self, *args, **kwargs)
  File "/home/marian/.local/lib/python3.5/site-packages/matplotlib/axes/_subplots.py", line 77, in __init__
    self._axes_class.__init__(self, fig, self.figbox, **kwargs)
  File "/home/marian/.local/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 488, in __init__
    raise ValueError('Width and height specified must be non-negative')
ValueError: Width and height specified must be non-negative

Expected outcome
Interactive matplotlib window with dynamically added 100 plots. While plots are being added window should be resizable. After 25'th plot it will make itself smaller in an effort to reproduce the bug. In Matplotlib version 2.0.2 it works without crashing.

Matplotlib version

  • Operating system: Kubuntu 16.04 64 bit, Linux 4.13.0-38-generic Fix git instructions on matplotlib.sf.net #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  • Matplotlib version: 2.2.2
  • Matplotlib backend (print(matplotlib.get_backend())): TkAgg
  • Python version: 3.5.2

Installed matplotlib using:
pip3 install --user matplotlib==2.2.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions