Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pw can't display plotnine and breaks plotnine.ggplot as a side-effect #56

Open
felimomo opened this issue Feb 27, 2024 · 4 comments
Open
Labels
enhancement New feature or request

Comments

@felimomo
Copy link

In the issue that I'm encountering, two things go wrong:

  1. pw.load_ggplot() called on a ggplot object produces the following:

AttributeError: 'ggplot' object has no attribute '_create_figure'

  1. If, after attempting this, a different cell is run to display a ggplot object, the same error appears. However, ggplot objects have no problem being displayed before attempting to run pw.load_ggplot().

So it seems that the problem is a side-effect of the functionpw.load_ggplot.

Code blocks to reproduce problem

from plotnine import ggplot, aes, geom_point, scale_color_gradient
from plotnine.data import mpg

p = ggplot(aes(x="displ", y="cty"), mpg)
P = p + geom_point()
P

This displays the plot as expected.

import patchworklib as pw

No problems at import.

pw_P = pw.load_ggplot(P, figsize=(1,1))

This gives the aforementioned attribute error, with the following traceback:

----> 1 pw.load_ggplot(P, figsize=(1,1))

File [python3.10/site-packages/patchworklib/patchworklib.py:479](python3.10/site-packages/patchworklib/patchworklib.py#line=478), in load_ggplot(ggplot, figsize)
    477     matplotlib.rcParams["figure.subplot.wspace"] = figure_subplot_wspace_ori [/](workspace) figsize[0] 
    478     matplotlib.rcParams["figure.subplot.hspace"] = figure_subplot_hspace_ori [/](workspace) figsize[1] 
--> 479     fig, gcp = gcp.draw(return_ggplot=True) 
    481 else:
    482     fig, gcp = gcp.draw(return_ggplot=True)

File [/opt/venv/lib/python3.10/site-packages/patchworklib/modified_plotnine.py:37](python3.10/site-packages/patchworklib/modified_plotnine.py#line=36), in draw(self, return_ggplot, show)
     34 self._build()
     36 # setup
---> 37 figure, axs = self._create_figure()
     38 self._setup_parameters()
     39 self.theme.setup()

AttributeError: 'ggplot' object has no attribute '_create_figure'

After this, plotnine.ggplot objects start producing the same error. E.g., the following cell produces the same error

P

New ggplot objects suffer the same fate, eg.:

q = ggplot(aes(x="displ", y="cty"), mpg)
Q = q + geom_point()
Q

--> [...] AttributeError: 'ggplot' object has no attribute '_create_figure'

This was tested on a jupyterhub server. The problem only goes away if I restart the jupyterhub kernel.

@turtleman99
Copy link

Solved by install an older version of plotnine

pip install git+https://github.com/has2k1/[email protected]

@ponnhide
Copy link
Owner

Apologies for the inconvenience. However, I am unable to continue supporting plotnine in patchworklib due to limited capacity in my labour. I believe patchworklib remains a valuable library even if it only supports matplotlib and seaborn.

If there are many requests like yours, I will consider addressing this issue, but please do not have large expectations..
I'm terribly sorry about this thing...

@ponnhide ponnhide added the enhancement New feature or request label May 13, 2024
@felimomo
Copy link
Author

felimomo commented May 13, 2024 via email

@ponnhide
Copy link
Owner

Patchworklib tentatively supports the newest version of plotnine. However, it likely still contains many bugs and may produce unexpected results. If you find anything, please let me know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants