Skip to content

AttributeError: 'Figure' object has no attribute '_cachedRenderer' #17627

Closed

Description

@mapfiable

Bug report

Bug summary

I was trying to follow the first suggestion of this post, and copy a figure using pickle. In my example however, this results in an AttributeError: 'Figure' object has no attribute '_cachedRenderer'.

Code for reproduction

import io
import pickle
import numpy as np
from copy import copy, deepcopy
from contextlib import contextmanager
import matplotlib.pyplot as plt


@contextmanager
def copy_figure(fig: plt.Figure):
    buf = io.BytesIO()
    pickle.dump(fig, buf)
    buf.seek(0)
    fig_copy = pickle.load(buf)
    # fig_copy = copy(fig)  # you get the same error when using copy instead
    # fig_copy = deepcopy(fig)  # this results in an "NotImplementedError: 
    #    TransformNode instances can not be copied. Consider using frozen() 
    #    instead." which I have no idea what that means either.
    yield fig_copy
    plt.close(fig_copy)


def example():
    image = np.random.uniform(0, 1, (100, 100))
    fig, ax = plt.subplots()
    image_artist = ax.imshow(image)
    fig.colorbar(image_artist)
    with copy_figure(fig) as copy_fig:
        copy_fig.show()

    fig.show()


example()

I am not sure if this is wanted behaviour, and why this even happens, but if it is not supposed to happen, I guess it would be a simple fix to change this line in tight_layout.get_renderer

    if fig._cachedRenderer:

to this line:

    if hasattr(fig, '_cachedRenderer') and fig._cachedRenderer:

Matplotlib version

  • Operating system: Windows 10 Home 64bit
  • Matplotlib version: 3.1.3 (via Anaconda)
  • Matplotlib backend: backend_interagg
  • Python version: 3.7.7

Activity

  1. added this to the v3.3.0 milestone on Jun 22, 2020
  2. d-o0o-b commented on May 21, 2021

    @d-o0o-b

    The crux of the matter is that you used "pickle"

  3. mapfiable commented on May 21, 2021

    @mapfiable
    Author

    I don't understand. What do you mean?

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

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions