has2k1 / plotnine

A Grammar of Graphics for Python
https://plotnine.org
MIT License
3.99k stars 213 forks source link

Artifacts in PlotnineAnimation #816

Closed AlFontal closed 2 months ago

AlFontal commented 3 months ago

Whenever an animation of figures containing colorbars is generated and saved via PlotnineAnimation, an artifact with a repeated colorbar, centered at coordinates (0, 0), appears in the animation.

I would create a reproducible example but even the example used in the Plotnine docs shows this issue:

image

In cases like mine, however, it can become more annoying since the colorbar is horizontal and obstructs a part of the choropleth map I am showing:

japan_ndvi_2015

My solution by now is to simply add a bottom margin to the plot and crop out the part with the artifact, but there has to be something in the animation module that causes this behavior that probably should be easy enough to fix?

jeroenjanssens commented 3 months ago

I can confirm this. Just want to add that the title and subtitle are not showing up in the animation. Here's one frame:

one_frame

And here's a short animation:

https://github.com/has2k1/plotnine/assets/1368256/11a5223f-42af-4e59-9fe0-81739527227f

jeroenjanssens commented 3 months ago

A workaround for this would be to save each frame as an image and then use ffmpeg to stitch those images into a video. For the example in the documentation, that could be something like:

for frame, k in enumerate(np.linspace(kmin, kmax, num_frames)):
    plot(k).save(f"frames/{frame:06}.png")
! ffmpeg -y -framerate 10 -i frames/%06d.png -pix_fmt yuv420p -vcodec libx264 -crf 18 animation.mp4

https://github.com/has2k1/plotnine/assets/1368256/bdd45f2c-097a-4834-90fb-dafab1dd7c22