Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[Bug]: matplotlib.pyplot.clf is very slow #23771

Copy link
Copy link
Open
@eendebakpt

Description

@eendebakpt
Issue body actions

Bug summary

For relatively simple plotting examples the plt.clf() command can take over 30% of the calculation time. One would expect that a clear command is relatively simple and takes a limited amount of time

Code for reproduction

import numpy as np
import time
import matplotlib
import matplotlib.pyplot as plt
print(matplotlib.__version__)

def profile_expression(expression):
    import cProfile  
    import tempfile
    import os
    import subprocess
    tmpdir = tempfile.mkdtemp()
    statsfile = os.path.join(tmpdir, "profile_expression_stats")
    print("profile_expression: running")
    t0 = time.perf_counter()
    cProfile.run(expression, statsfile)
    dt = time.perf_counter() - t0
    print(f"profiling: {dt:.2f} [s]")
    r = subprocess.Popen(["snakeviz", statsfile])
    return r

x=np.linspace(0, 10, 1000)
y=np.linspace(0, 20, 1000)**0.1

def go():
    for ii in range(5):
        plt.figure(100); 
        plt.clf()
        plt.plot(x, y, '.', label='n')
        plt.plot(x, y+x, '.-', label='m')
        plt.xlabel('dsf')
        plt.title('sdfs')
        plt.legend()
        plt.draw()

if __name__=='__main__':
    profile_expression('go()')

Actual outcome

The output of the minimal example (which requires https://github.com/jiffyclub/snakeviz to be installed) is a profiling graph of the code executed in the minimal example:

image

Expected outcome

The plt.clf() should be very fast compared to the actual plotting. Going into the details of the profiling results shows a large amount of time being spend in axis.reset_ticks.

Additional information

No response

Operating system

Windows

Matplotlib Version

3.6.0.dev3058+g87197156eb

Matplotlib Backend

Qt5Agg

Python version

3.10.0

Jupyter version

No response

Installation

git checkout

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.